C# 检查sql数据库中是否存在记录会返回错误的结果
我正在Asp.net(C#)中处理我的项目,我有一个文本框可以从用户那里获取字符串(通过单击按钮),与从用户那里获取的所有字符串一样(用户名、电子邮件等),我检查输入字符串是否存在于数据库(SQL)中,如果存在,将显示一条错误消息 我在.cs代码隐藏文件中使用此代码:C# 检查sql数据库中是否存在记录会返回错误的结果,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在Asp.net(C#)中处理我的项目,我有一个文本框可以从用户那里获取字符串(通过单击按钮),与从用户那里获取的所有字符串一样(用户名、电子邮件等),我检查输入字符串是否存在于数据库(SQL)中,如果存在,将显示一条错误消息 我在.cs代码隐藏文件中使用此代码: string cn = cnTextBox.Value; SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDB"].C
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测试我的项目时,这种情况会反复出现,但当我使用另一个bowser(如Firefox)时,这种情况从未发生过。
有什么不对劲吗?有什么建议吗
谢谢你的帮助 评论太长。您确定正在查看应用程序正在使用的同一个数据库吗 无关提示:
SqlConnection
、SqlCommand
和SqlDataReader
都是IDisposable
,因此每个都应该使用块位于中
SqlCommand
的构造函数dr[“CN”]。ToString()代码>首选dr.GetString(0)代码>
评论太长了。您确定正在查看应用程序正在使用的同一个数据库吗 无关提示:
SqlConnection
、SqlCommand
和SqlDataReader
都是IDisposable
,因此每个都应该使用块位于中
SqlCommand
的构造函数dr[“CN”]。ToString()代码>首选dr.GetString(0)代码>
修剪你的价值已经通过。可能是添加了额外的空间,使其不同于您所说的“xxxx”和“xxxxn”,n可能是额外的空间 修剪已传递的值。可能是添加了额外的空间,使其不同于您所说的“xxxx”和“xxxxn”,n可能是额外的空间 如果在if(cn==value)语句中插入断点,那么cn和value是什么?您描述问题的方式表明您需要做更多的研究:通过单独测试代码进一步缩小问题范围(浏览器不重要),验证实际传入的内容(使用日志记录或调试器),…顺便说一句,毕竟,字符串被插入到数据库中。如果不应该插入,则应使用唯一索引作为第二级业务逻辑保护。您正在编写大量不必要的代码。如果命令的执行返回行,则不需要检查返回的值。它们是一样的。此外,您可以使用IF-EXISTS将代码缩短为一个简单的ExecuteScalar@Berkay,我插入了一个断点,发现value和cn都有相同的内容,但我现在可以根据Steve所说的来理解。如果在if(cn==value)中插入断点,cn和value是什么语句?您描述问题的方式表明您需要做更多的研究:通过单独测试代码进一步缩小问题范围(浏览器应该不重要),验证实际传入的内容(使用日志或调试器),…顺便说一句,字符串毕竟插入到数据库中。如果不应该插入,则应使用唯一索引作为第二级业务逻辑保护。您正在编写大量不必要的代码。如果命令的执行返回行,则不需要检查返回的值。它们是一样的。此外,您可以使用IF-EXISTS将代码缩短为一个简单的ExecuteScalar@Berkay,我插入了一个断点,看到value和cn都有相同的内容,但我现在可以根据Steve所说的来理解。