我在C#中准备好语句有问题:
OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = ?";
cmd.Parameters.Add("@USER_ID", OdbcType.VarChar, 250).Value = email;
Run Code Online (Sandbox Code Playgroud)
(当然电子邮件包含有效的电子邮件地址,带@符号).
此代码返回一个随机错误 -
"连接已被禁用"{"错误[01000] [Microsoft] [ODBC SQL Server驱动程序] [TCP/IP套接字] ConnectionWrite(send()).错误[08S01] [Microsoft] [ODBC SQL Server驱动程序] [TCP/IP套接字]常规网络错误.请检查您的网络文档."}
但是,如果我在没有准备好的语句的情况下运行我的代码,
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = '"+email+"'";
Run Code Online (Sandbox Code Playgroud)
一切都很完美.
也许这与我在参数化值中有@符号的事实有关?我倾向于认为我不是第一个尝试使用电子邮件地址创建预备声明的人...
我不知道出了什么问题!其他准备好的陈述正常...
你能帮忙吗?:)谢谢,Nili
我在我的 C# 代码中添加了一个多行 SQL 代码,如下所示:
sqlCode = @"SELECT
w.objectID,
w.attr1397 'LastName',
w.attr1395 'FirstName',
w.attr1396 'MiddleName',
w.attr1404 'Gender',
w.attr1436 'OtherName',
convert(varchar,w.attr1402, 101) 'DOB' ,
w.attr1401 'SSN',
d.employmentStatus
FROM [db].[table] w left outer join
(
WHERE w.attr1397 = '" + k + "'
AND
w.attr1395 = c
AND
w.attr1401 = s
ORDER BY 4, 2, 3";
Run Code Online (Sandbox Code Playgroud)
的k,c以及s是从我想用,这是发生了什么函数变量:

我该如何解决?
我正在查看参数化查询问题,我找不到使用SqlDataReader参数化查询来填充下拉列表的示例.
现在,我可以在这里使用我的代码填充我的下拉
if (!this.IsPostBack)
{
using (SqlConnection con = new SqlConnection(SQLConnectionString))
{
System.Data.SqlClient.SqlCommand go = new System.Data.SqlClient.SqlCommand();
con.Open();
go.Connection = con;
go.CommandText = "SELECT InsuredID, FirstName, LastName FROM [Lab2].[dbo].[INSURED]";
go.ExecuteNonQuery();
SqlDataReader readIn = go.ExecuteReader();
while (readIn.Read())
{
ddlHomeInsuredID.Items.Add(
new ListItem(readIn["InsuredID"].ToString() + " : " + readIn["FirstName"].ToString()
+ " " + readIn["LastName"].ToString()));
}
con.Close();
ddlHomeInsuredID.Items.Insert(0, new ListItem("--Select InsuredID--", "0"));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想让这个select语句参数化.我怎样才能做到这一点?我很乐意编写参数化的插入语句,如下所示:
using (SqlConnection connection = new SqlConnection(SQLConnectionString))
{
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = …Run Code Online (Sandbox Code Playgroud) 我是C#的新手,并且编写了以下代码。阅读文档之后,我意识到我的代码应该容易受到SQL注入的攻击,因为我没有为参数使用参数(据我所知,您可以通过注入不需要的查询search.Text)。因为我实际上是将我的值锁定在“”引号内,所以我什至不必担心吗?
我在这里找到了一些指示,但无法使它起作用: 如何在sql语句中使用字符串变量
public void InvokeDataGridAddress()
{
switch (ComboBoxSelection.Text)
{
case "NASLOV":
comboBoxValue = "SELECT * FROM [cbu_naslovi] WHERE [ADDRESS] LIKE '%" + search.Text + "%' COLLATE Latin1_general_CI_AI";
break;
case "LASTNIK":
comboBoxValue = "SELECT [cbu_naslovi].* FROM [cbu_deli], [cbu_naslovi] WHERE [cbu_deli].LASTNIK LIKE '%" + search.Text + "%' COLLATE Latin1_general_CI_AI AND [cbu_deli].IDX = [cbu_naslovi].ID";
break;
case "OBJEKT":
comboBoxValue = "SELECT * FROM [cbu_naslovi] WHERE [SO] LIKE '%" + search.Text + "%'";
break;
case "PARCELA":
comboBoxValue = "SELECT * FROM [cbu_naslovi] …Run Code Online (Sandbox Code Playgroud)