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
спасибо, все получилось