Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查sql数据库中是否存在记录会返回错误的结果_C#_Asp.net_Sql Server - Fatal编程技术网

C# 检查sql数据库中是否存在记录会返回错误的结果

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

我正在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测试我的项目时,这种情况会反复出现,但当我使用另一个bowser(如Firefox)时,这种情况从未发生过。

有什么不对劲吗?有什么建议吗


谢谢你的帮助

评论太长。您确定正在查看应用程序正在使用的同一个数据库吗

无关提示:

  • SqlConnection
    SqlCommand
    SqlDataReader
    都是
    IDisposable
    ,因此每个都应该使用
    块位于
  • 你可能想
  • 您可以将连接传递给
    SqlCommand
    的构造函数
  • 而不是
    dr[“CN”]。ToString()首选
    dr.GetString(0)
  • 默认情况下,SQL字符串比较不区分大小写。C#字符串相等性区分大小写。SQL可能会找到该记录,而您的C#代码可能会认为它是不同的
  • 任何问题,包括短语“[doing X]returns Error results”(执行X]返回错误结果)都忽略了一点,即计算机完全按照您的要求执行,因此,除非这是一个怪诞的错误,数百万其他用户几十年来都没有见过它;然后你需要意识到,它正在返回正确的结果。这种观念上的转变,加上调试器的使用,可能会帮助您诊断问题

  • 评论太长了。您确定正在查看应用程序正在使用的同一个数据库吗

    无关提示:

  • SqlConnection
    SqlCommand
    SqlDataReader
    都是
    IDisposable
    ,因此每个都应该使用
    块位于
  • 你可能想
  • 您可以将连接传递给
    SqlCommand
    的构造函数
  • 而不是
    dr[“CN”]。ToString()首选
    dr.GetString(0)
  • 默认情况下,SQL字符串比较不区分大小写。C#字符串相等性区分大小写。SQL可能会找到该记录,而您的C#代码可能会认为它是不同的
  • 任何问题,包括短语“[doing X]returns Error results”(执行X]返回错误结果)都忽略了一点,即计算机完全按照您的要求执行,因此,除非这是一个怪诞的错误,数百万其他用户几十年来都没有见过它;然后你需要意识到,它正在返回正确的结果。这种观念上的转变,加上调试器的使用,可能会帮助您诊断问题

  • 修剪你的价值已经通过。可能是添加了额外的空间,使其不同于您所说的“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所说的来理解。