参数化查询构建错误
Parameterized Query Build Error
为什么我的参数化变量没有添加到我的 Sql 查询中?
我有两个由最终用户选择的 combobox.text
设置的参数化变量。
我在尝试使用使用参数化变量的查询时收到以下错误。
Additional information: Must declare the scalar variable "@username"
我是不是漏掉了什么?
示例查询
SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE username = @username and status = @status";
代码片段
//Decide what query
String SQL = SQLSelection();
//Connection String
String ConnString = "Data Source=dbsqlexpress; Provider=SQLOLEDB; Initial Catalog=Data; User ID=mobile; Password=PW";
//Create and initalize Oledbconnection object and pass connection string into it.
OleDbConnection con = new OleDbConnection(ConnString);
//open connection to database
con.Open();
//create adapter that sits inbetween dataset and datbase
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(SQL,con);
adapter.SelectCommand.Parameters.Add("@username", OleDbType.VarChar).Value = auditorCmb.Text;
adapter.SelectCommand.Parameters.Add("@status", OleDbType.VarChar).Value = statusCmb.Text;
//Create dataset
DataSet dataset = new DataSet();
using (DataTable dt = new DataTable())
{
adapter.Fill(dt);
dataGridView1.AutoResizeColumns();
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
con.Close();
dataGridView1.DataSource = dt;
int rowCount = rowCount = dt.Rows.Count;
label10.Text = rowCount.ToString("n0");
}
}
对于 OLE DB(和 ODBC),您需要在 SQL 语句中指定 ?
作为参数标记。然后根据顺序参数将这些映射到集合中。
SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE username = ? and status = ?;";
避免在 .NET 应用程序中使用 OLE DB 和 ODBC。 .Net Provider for SQL Server
(a.k.a SqlClient) 将为 .Net 应用程序提供更好的性能。此外,Microsoft 已宣布在 SQL 服务器中弃用用于关系数据库访问的 OLE DB。
当 CommandType 设置为 Text 时,OLE DB .NET Provider 不支持将参数传递给 SQL 语句或 OleDbCommand 调用的存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如:
SELECT * 来自客户 WHERE CustomerID = ?
为什么我的参数化变量没有添加到我的 Sql 查询中?
我有两个由最终用户选择的 combobox.text
设置的参数化变量。
我在尝试使用使用参数化变量的查询时收到以下错误。
Additional information: Must declare the scalar variable "@username"
我是不是漏掉了什么?
示例查询
SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE username = @username and status = @status";
代码片段
//Decide what query
String SQL = SQLSelection();
//Connection String
String ConnString = "Data Source=dbsqlexpress; Provider=SQLOLEDB; Initial Catalog=Data; User ID=mobile; Password=PW";
//Create and initalize Oledbconnection object and pass connection string into it.
OleDbConnection con = new OleDbConnection(ConnString);
//open connection to database
con.Open();
//create adapter that sits inbetween dataset and datbase
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(SQL,con);
adapter.SelectCommand.Parameters.Add("@username", OleDbType.VarChar).Value = auditorCmb.Text;
adapter.SelectCommand.Parameters.Add("@status", OleDbType.VarChar).Value = statusCmb.Text;
//Create dataset
DataSet dataset = new DataSet();
using (DataTable dt = new DataTable())
{
adapter.Fill(dt);
dataGridView1.AutoResizeColumns();
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
con.Close();
dataGridView1.DataSource = dt;
int rowCount = rowCount = dt.Rows.Count;
label10.Text = rowCount.ToString("n0");
}
}
对于 OLE DB(和 ODBC),您需要在 SQL 语句中指定 ?
作为参数标记。然后根据顺序参数将这些映射到集合中。
SQL = "SELECT stationID, LocationName, plandate, username, status FROM dbo.joblist WHERE username = ? and status = ?;";
避免在 .NET 应用程序中使用 OLE DB 和 ODBC。 .Net Provider for SQL Server
(a.k.a SqlClient) 将为 .Net 应用程序提供更好的性能。此外,Microsoft 已宣布在 SQL 服务器中弃用用于关系数据库访问的 OLE DB。
当 CommandType 设置为 Text 时,OLE DB .NET Provider 不支持将参数传递给 SQL 语句或 OleDbCommand 调用的存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如:
SELECT * 来自客户 WHERE CustomerID = ?