|
|
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
В университете по дисциплине «Базы данных» задали задание. Суть его заключается в том, что необходимо построить корпоративный Интернет-сайт. В базе данных имеются следующие таблицы: Customers (покупатели), Products (товары), Categories (категории товаров), Orders (заказы), Orders_Details (детали заказов). При тестировании приложений возникает ошибка: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Invalid column name 'NameCategory'. at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) at Baza.Service1.GetCategories(String CUSTOMERID, String PASS) in c:\inetpub\wwwroot\Baza\Service1.asmx.vb:line 72 --- End of inner exception stack trace --- При этом, если удалить следующую часть программного кода, то все работает, но не заружается DropDownList. Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not IsPostBack Then Dim ws As New localhost.Service1() Dim dsOrders As New DataSet() Dim dsDetais As New DataSet() Dim log, pass As String Dim orderid As String log=Session. Item("login") pass=Session.Item("pass") dsOrders.Merge (ws.GetOrders(log, pass)) - ошибка возникает из-за этой строки DropDownList1.DataSource=dsOrders DropDownList1.DataMember="Orders" DropDownList1.AutoPostBack=True DropDownList1.DataTextField="OrderID" DropDownList1.DataBind() orderid=DropDownListl.SelectedItem.Value dsDetais.Merge(ws.GetDetails(log, pass, orderid)) DataGrid1.DataSource=dsDetais DataGrid1.DataBind() Session.Item("OrderID")=orderid End If End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 22:55 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
А что делается в функции GetOders(...)? Можно ее текст увидеть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 22:59 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
<WebMethod()> Public Function GetOrders (ByVal CUSTOMERID As String, ByVal PASS As String) As DataSet Dim Orders As New DataSet Dim user As Boolean user = CustomerEnter (CUSTOMERID, PASS) If user Then SqlSelectCommand4.Parameters("@CustomerID").Value = CUSTOMERID OrdersSqlDataAdapter.Fill(Orders) End If Return Orders End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:00 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Нужно порверить текст команды в sqlSelectCommand, вы уверены, что в таблице базы данных из которой берутся данные есть поле с именем NameCategory? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:03 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Да. Уверена, что есть. Но проблема в том, что поле называется CategoryName. Текст команды в sqlSelectCommand следующий: SELECT CategoryID, CategoryName FROM Categories ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:06 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Можно еще на сервере запустить профайлер и посмотреть какой именно запрос приходит на сервер при попытке выполнить Fill в вашем DataAdapter. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:13 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
А не подскажите как это сделать (как запустить профайлер)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:22 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Сервер у вас на машине стоит? Тогда в меню пуск есть группа Microsoft SQL Server -> Profiler ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:25 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
А дальше что делать, когда я его запустила? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:36 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Если я все сделала правльно... Результат получился следующий... exec sp_executesql N'SELECT CustomerID, CompanyName, Pass FROM Customers WHERE (CustomerID = @CUSTOMERID)', N'@CUSTOMERID varchar(5)', @CUSTOMERID = default ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 00:02 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Давайте посмотрим на эту задачу сначала. Я запускаю первую форму (default.asmx) и регистрируюсь, т.е. ввожу имя и пароль. Далее я должна попасть на вторую форму main.asmx, в которой я могу посмотреть заказы. Но проблема в том, что выскакивает ошибка System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Invalid column name 'NameCategory'. at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) at Baza.Service1.GetCategories(String CUSTOMERID, String PASS) in c:\inetpub\wwwroot\Baza\Service1.asmx.vb:line 72 --- End of inner exception stack trace --- Если посмотреть в SQL Profiler, то там будет сообщение следующего содержания: SELECT CategoryID, NameCategory FROM Categories. При этом, если не писать в программном коде в форме main.asmx этот кусок: If Not IsPostBack Then Dim ws As New localhost.Service1 Dim ds As New DataSet Dim log, pass As String log = Session.Item("login") pass = Session.Item("pass") ds.Merge(ws.GetCategories(log, pass)) DropDownList1.DataSource = ds DropDownList1.DataMember = "Categories" DropDownList1.AutoPostBack = True DropDownList1.DataTextField = "CategoryName" DropDownList1.DataValueField = "CategoryID" DropDownList1.DataBind() End If то у меня открывается форма с заказами, но при этом она не заполняется данными. А в SQL Profiler пишется: exec sp_executesql N'SELECT CustomerID, CompanyName, Pass FROM Customers WHERE (CustomerID = @CUSTOMERID)', N'@CUSTOMERID varchar(5)', @CUSTOMERID = '10357' Но затем, когда я щелкаю по кнопке "заказать" и по идее я должна перейти на следующую форму zakaz.asmx, в которой я могу сформировать заказ товара, выдается ошибка: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Invalid object name 'Order Details'. at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) at Baza.Service1.GetDetails(String CUSTOMERID, String PASS, Int32 OrderID) in c:\inetpub\wwwroot\Baza\Service1.asmx.vb:line 136 --- End of inner exception stack trace --- А в SQL Profiler пишется: exec sp_executesql N'SELECT [Order Details].OrderID, [Order Details].ProductID, Products.ProductName, [Order Details].Price, [Order Details].Quantity, Products.ProductID AS Expr1 FROM [Order Details] LEFT OUTER JOIN Products ON [Order Details].ProductID = Products.ProductID WHERE ([Order Details].OrderID = @OrderID)', N'@OrderID varchar(5)', @OrderID = '7223' В таблицах у меня есть следующие столбцы: Customers (покупатели): CustomerID, CustomerName, Pass Products (товары): ProductID, ProductName, CategoryID, UnitPrice Categories (категории товаров): CategoryID, CategoryName Orders (заказы): OrderID, CustomerID, OrderDate Order_Details (детали заказов): OrderID, ProductID, UnitPrice, Quantity Почему вместо столбца CategoryName выдает ошибку с названием столбца NameCategory. Вместо таблицы Order_Details выдает ошибку связанную с таблицей Order Details. Хотя пересмотрев весь программный код и все select, insert, delete я убедилась в правильности написания всех таблиц и столбцов. В чем проблема я понять никак не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 00:49 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Думаю, что эта проблема относится больше не к проектированию БД, а к используемому программному средству, ASP.NET, если не ошибаюсь? Давай перенесу эту тему в соответствующий форум. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 01:27 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Спасибо... Я туда тоже написала, так что эта тема там тоже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 01:30 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
А в этой части программного кода нет никакой ошибки? Потому что из-за нее ничего не работает. Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not IsPostBack Then Dim ws As New localhost. Service1 () Dim ds As New DataSet () Dim log, pass As String log=Session. Item ("login") pass=Session.Item("pass") ds.Merge(ws.GetCategories(log, pass)) DropDownList1.DataSource=ds DropDownList1.DataMember="Categories" DropDownList1.AutoPostBack=True DropDownList1.DataTextField="CategoryName" DropDownList1.DataValueField="CategoryID" DropDownList1.DataBind() End If End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 01:36 |
|
||
|
Как исправить ошибку?
|
|||
|---|---|---|---|
|
#18+
Оксана НСпасибо... Я туда тоже написала, так что эта тема там тоже есть. Тогда здесь я закрою тему, поскольку действительно эта проблема имеет мало общего собственно с проектированием. Ссылка а тему в форуме ASP.NET : Как исправить ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 01:58 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34497961&tid=1544565]: |
0ms |
get settings: |
11ms |
get forum list: |
23ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
86ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
3ms |
| others: | 220ms |
| total: | 405ms |

| 0 / 0 |
