gpt4 book ai didi

C# Prepared Statements - @sign (at/strudel sign) 查询

转载 作者:太空狗 更新时间:2023-10-29 17:43:54 35 4
gpt4 key购买 nike

我对 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;

(当然电子邮件包含一个有效的电子邮件地址,带有@符号)。

此代码返回随机错误 -

"The connection has been disabled" {"ERROR [01000] [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]ConnectionWrite (send()). ERROR [08S01] [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]General network error. Check your network documentation."}

但是,如果我在没有准备好的语句的情况下运行我的代码,这意味着:

cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = '"+email+"'";

一切正常。

也许这与我在参数化值中有一个 @ 符号有关?我倾向于认为我不是第一个尝试使用电子邮件地址创建准备好的声明的人......

不知道怎么回事!其他准备好的语句正常工作...

你能帮忙吗? :)谢谢,尼利

最佳答案

的确,ODBC 在支持命名参数方面也存在一些问题。但是,命名参数的某些用法是可能的。

例如,在您的情况下,以下语法有效:

OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = ?";
cmd.Parameters.Add("USER_ID", OdbcType.VarChar, 250).Value = email;

更棘手的情况是当您没有参数的唯一匹配项时,例如 USER_ID = ?;例如,当您想在 WHERE 子句中使用 IN 运算符时。

然后下面的语法就可以完成这项工作:

OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID IN (?, ?)";
cmd.Parameters.Add("?ID1", OdbcType.VarChar, 250).Value = email1;
cmd.Parameters.Add("?ID2", OdbcType.VarChar, 250).Value = email2;

请注意在参数名称中使用 ?(问号)而不是 @(at 符号)。尽管请注意,在这种情况下参数值的替换与其名称无关,而仅与其在参数集合中的顺序有关。

我希望这对您有所帮助:-)

关于C# Prepared Statements - @sign (at/strudel sign) 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4954877/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com