【发布时间】:2018-09-15 21:37:11
【问题描述】:
我正在使用 Asp.net (C#) 开发我的项目,我有一个文本框可以从用户那里获取一个字符串(通过按钮单击),就像我从用户那里得到的所有字符串一样 - (用户名,电子邮件等),我检查输入字符串是否存在于数据库(SQL)中,如果存在,则显示错误消息。
我在 .cs 代码隐藏文件中使用此代码:
string cn = cnTextBox.Value;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("SELECT [CN] FROM [dbo].[MyTable] WHERE CN=@CN");
cmd.Parameters.AddWithValue("@CN", cn);
cmd.Connection = con;
SqlDataReader dr = cmd.ExecuteReader();
bool theSame = false;
if (dr.HasRows())
while (dr.Read())
{
string value = dr["CN"].ToString();
if (cn == value)
theSame = true;
}
if (theSame)
errorMessage.Style["display"] = "block";
else
errorMessage.Style["display"] = "none";
if (!theSame)
// code to insert the string to a new record in the database, works fine.
如您所见,我在SELECT(参数化)查询中使用了WHERE 子句,以验证该字符串是否已存在于数据库中。
注意:数据库中的“CN”列的类型为varchar(50)。
问题是,(以前从未发生过,这真的不是我第一次这样做),如果我在数据库的记录中(在 CN 列中)有字符串“xxxxx”,并且输入字符串我要插入的是“xxxxxn”(长度不一样)或“xxxxn”(字符不一样),上面的检查返回这个输入已经存在于数据库中并且错误信息显示。更奇怪的是?毕竟字符串是插入到数据库中的。
注意:当我使用 Internet Explorer 11 测试我的项目时,它会一遍又一遍地发生,但在我使用其他浏览器(如 Firefox)时从未发生过。
有什么问题吗?有什么建议吗?
感谢您的帮助!
【问题讨论】:
-
在if(cn == value)语句中插入断点,cn和value是什么?
-
您描述问题的方式表明您需要做更多的研究:通过单独测试您的代码(浏览器应该无关紧要)进一步缩小问题范围,验证实际传入的内容(使用日志记录或调试器),...
-
顺便说一句,字符串毕竟是插入到数据库中的。。如果不应该插入,则应该使用唯一索引作为二级业务逻辑保护。
-
你写了很多不必要的代码。如果您的命令执行返回行,那么您不需要检查返回的值。他们是一样的。此外,您可以使用 IF EXISTS 将代码缩短为简单的 ExecuteScalar
-
@Berkay,我插入了一个断点,看到 value 和 cn 有相同的内容,但我现在可以根据史蒂夫所说的理解它。
标签: c# asp.net sql-server