DataSet: трабл заполнения
dmitran
Дата: 30.12.2005 04:43:49
Ошибка в коде возникает при обработке строки adapter.Fill(dataSet);
Exception на это пишет: ERROR [42000][Microsoft][Sql Server Driver][Sql Server]Must declare the variable '@login' ,но я ведь ее декларировал в строке command.Parameters.....
Помогите разобраться, мож чего-то не дописал...
string connectionString = "Driver={SQL Server};Server=NR\\MSSQLSERVER2000;Database=t1;Trusted_Connection=yes;" ;
string commandTextSelect = "SELECT Id, Login, Password, Access FROM stUsers WHERE (Login LIKE @Login)";
DataSet dataSet = new DataSet();
dataGrid1.DataSource = dataSet;
try {
OdbcCommand command = new OdbcCommand();
command.CommandText = commandTextSelect;
command.Parameters.Add(new System.Data.Odbc.OdbcParameter("@Login",System.Data.Odbc.OdbcType.Text,10,"Login"));
command.Parameters["@Login"].Value = textBox9.Text;
OdbcConnection connection = new OdbcConnection(connectionString);
command.Connection = connection;
connection.Open();
MessageBox.Show(connection.State.ToString());
OdbcDataAdapter adapter = new OdbcDataAdapter();
adapter.SelectCommand = command;
adapter.Fill(dataSet);
}
dmitran
Дата: 30.12.2005 04:57:37
dmitran |
Ошибка в коде возникает при обработке строки adapter.Fill(dataSet);
Exception на это пишет: ERROR [42000][Microsoft][Sql Server Driver][Sql Server]Must declare the variable '@login' ,но я ведь ее декларировал в строке command.Parameters.....
Помогите разобраться, мож чего-то не дописал...
string connectionString = "Driver={SQL Server};Server=NR\\MSSQLSERVER2000;Database=t1;Trusted_Connection=yes;" ;
string commandTextSelect = "SELECT Id, Login, Password, Access FROM stUsers WHERE (Login LIKE @Login)"; DataSet dataSet = new DataSet(); dataGrid1.DataSource = dataSet;
try { OdbcCommand command = new OdbcCommand(); command.CommandText = commandTextSelect;
command.Parameters.Add(new System.Data.Odbc.OdbcParameter("@Login",System.Data.Odbc.OdbcType.Text,10,"Login")); command.Parameters["@Login"].Value = textBox9.Text;
OdbcConnection connection = new OdbcConnection(connectionString); command.Connection = connection; connection.Open(); MessageBox.Show(connection.State.ToString());
OdbcDataAdapter adapter = new OdbcDataAdapter(); adapter.SelectCommand = command;
adapter.Fill(dataSet);
} |
в строке (Login LIKE @Login)" конечно же (Login = @Login)" )
ошибка осталась та же...
dmitran
Дата: 30.12.2005 10:58:35
Гуру, подскажите, пожалуйста, в чем проблема...
f45f
Дата: 30.12.2005 11:32:42
Попробуй вместо
string commandTextSelect = "SELECT Id, Login, Password, Access FROM stUsers WHERE (Login LIKE @Login)"; |
напиши
string commandTextSelect = "SELECT Id, Login, Password, Access FROM stUsers WHERE Login = ?"; |
затем
command.Parameters.Add("@Login",OdbcType.VarChar, 10).Value = TextBox9.Text; |
и еще одно предположение . . .
Может быть Login нужен в connectiomString.
dmitran
Дата: 30.12.2005 11:49:58
f45f |
Попробуй вместо
string commandTextSelect = "SELECT Id, Login, Password, Access FROM stUsers WHERE (Login LIKE @Login)"; |
напиши
string commandTextSelect = "SELECT Id, Login, Password, Access FROM stUsers WHERE Login = ?"; |
затем
command.Parameters.Add("@Login",OdbcType.VarChar, 10).Value = TextBox9.Text; |
и еще одно предположение . . . Может быть Login нужен в connectiomString. |
прототип connectionstring не содержит параметра @Login )
Та же ошибка...
Помогите, гуру, где вы?
Andrew
Дата: 30.12.2005 13:24:27
try:
string commandTextSelect = "SELECT * FROM Permission WHERE (UserID LIKE ?)";
command.Parameters.Add(" ", OdbcType.Text).Value = "%ad%"; |
dmitran
Дата: 30.12.2005 23:12:32
Andrew |
try:
string commandTextSelect = "SELECT * FROM Permission WHERE (UserID LIKE ?)";
command.Parameters.Add(" ", OdbcType.Text).Value = "%ad%"; |
|
переменную @Login необходимо сохранить, а не заменять на ?
вопрос звучал, как правильно ее декларировать (см. текст ошибки)...
проблема осталась.....
BiGbother
Дата: 31.12.2005 00:08:57
1. какой дурак придумал юзать SSPI проверку вместе с прямой подачей логина? Вы уж определитесь - либо Trusted Auth (винда проверяет, имеет ли доступ к SQL серверу, тот кто залогинен) либо Plain (login/pass)
2. Нахрена ODBC юзать с MSSQL в .NET, когда нужно стремиться к импользованию pure .NET приложений и лучше использовать SqlAdapter.
BiGbother
Дата: 31.12.2005 01:22:31
Итоговое рабочее проверенное решение такое:
в классе создаём новый метод вида
private void DoTheJob (string servername, string databasename, out DataSet ds)
{
string connString = "Server=" +servername+ ";Database=" +databasename+ ";Trusted_Connection=True;";
string selString = "SELECT Id, Login, Password, Access FROM stUsers WHERE Login LIKE '%Login%'";
SqlDataAdapter sqlda = new SqlDataAdapter(selString, connString);
ds = new DataSet("MyDataSet");
sqlda.Fill(ds);
}
А в другом методе, или где там ещё, юзаем его таким образом:
DataSet myDataSet = new DataSet("zzz");
DoTheJob("NERO\\MSSQLSERVER2000", "test1", out myDataSet);
dataGrid1.DataSource = myDataSet;
Вот и всё решение...
dmitran
Дата: 31.12.2005 01:49:01
спасибо, все получилось