Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как исправить ошибку? / 15 сообщений из 15, страница 1 из 1
30.04.2007, 22:55
    #34497934
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
В университете по дисциплине «Базы данных» задали задание. Суть его заключается в том, что необходимо построить корпоративный Интернет-сайт. В базе данных имеются следующие таблицы: 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
...
Рейтинг: 0 / 0
30.04.2007, 22:59
    #34497936
Katrinmc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
А что делается в функции GetOders(...)? Можно ее текст увидеть?
...
Рейтинг: 0 / 0
30.04.2007, 23:00
    #34497938
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
<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
...
Рейтинг: 0 / 0
30.04.2007, 23:03
    #34497941
Katrinmc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Нужно порверить текст команды в sqlSelectCommand, вы уверены, что в таблице базы данных из которой берутся данные есть поле с именем NameCategory?
...
Рейтинг: 0 / 0
30.04.2007, 23:06
    #34497946
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Да. Уверена, что есть. Но проблема в том, что поле называется CategoryName.
Текст команды в sqlSelectCommand следующий:
SELECT CategoryID, CategoryName
FROM Categories
...
Рейтинг: 0 / 0
30.04.2007, 23:13
    #34497951
Katrinmc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Можно еще на сервере запустить профайлер и посмотреть какой именно запрос приходит на сервер при попытке выполнить Fill в вашем DataAdapter.
...
Рейтинг: 0 / 0
30.04.2007, 23:22
    #34497957
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
А не подскажите как это сделать (как запустить профайлер)?
...
Рейтинг: 0 / 0
30.04.2007, 23:25
    #34497961
Katrinmc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Сервер у вас на машине стоит? Тогда в меню пуск есть группа Microsoft SQL Server -> Profiler
...
Рейтинг: 0 / 0
30.04.2007, 23:36
    #34497972
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
А дальше что делать, когда я его запустила?
...
Рейтинг: 0 / 0
01.05.2007, 00:02
    #34497991
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Если я все сделала правльно... Результат получился следующий...

exec sp_executesql N'SELECT CustomerID, CompanyName, Pass FROM Customers WHERE (CustomerID = @CUSTOMERID)', N'@CUSTOMERID varchar(5)', @CUSTOMERID = default
...
Рейтинг: 0 / 0
01.05.2007, 00:49
    #34498011
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Давайте посмотрим на эту задачу сначала. Я запускаю первую форму (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 я убедилась в правильности написания всех таблиц и столбцов.

В чем проблема я понять никак не могу.
...
Рейтинг: 0 / 0
01.05.2007, 01:27
    #34498033
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Думаю, что эта проблема относится больше не к проектированию БД, а к используемому программному
средству, ASP.NET, если не ошибаюсь? Давай перенесу эту тему в соответствующий форум.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.05.2007, 01:30
    #34498035
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Спасибо... Я туда тоже написала, так что эта тема там тоже есть.
...
Рейтинг: 0 / 0
01.05.2007, 01:36
    #34498040
Оксана Н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
А в этой части программного кода нет никакой ошибки? Потому что из-за нее ничего не работает.

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
...
Рейтинг: 0 / 0
01.05.2007, 01:58
    #34498048
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исправить ошибку?
Оксана НСпасибо... Я туда тоже написала, так что эта тема там тоже есть.
Тогда здесь я закрою тему, поскольку действительно эта проблема имеет мало общего собственно с проектированием. Ссылка а тему в форуме ASP.NET : Как исправить ошибку?
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как исправить ошибку? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]