Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# 检查主键是否存在_C# - Fatal编程技术网

C# 检查主键是否存在

C# 检查主键是否存在,c#,C#,我曾经尝试过在早些时候发布此消息,但不得不将其删除,因为代码编辑器没有正确且不完整地发布此消息。另外,我有一位成员问我有关SQL注入的问题 故事是这样的: 我有一个页面,用户可以在提交到数据库之前检查他的信息。我只想在提交主键之前查看它是否存在,以避免出现服务器错误 在我的页面加载事件中,我有以下内容: SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString1"

我曾经尝试过在早些时候发布此消息,但不得不将其删除,因为代码编辑器没有正确且不完整地发布此消息。另外,我有一位成员问我有关SQL注入的问题

故事是这样的:

我有一个页面,用户可以在提交到数据库之前检查他的信息。我只想在提交主键之前查看它是否存在,以避免出现服务器错误

在我的页面加载事件中,我有以下内容:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString);

SqlCommand oldcmd = new SqlCommand("SELECT * from dbo.registrar WHERE [MY ID] = '"+ID+"'", conn);
oldcmd.CommandType = CommandType.Text;

SqlDataAdapter da = new SqlDataAdapter(oldcmd);
DataTable dt = new DataTable();
da.Fill(dt);

if (dt.Rows.Count >= 1)
{
   lblExists.Visible = true;
   lblExists.ForeColor = System.Drawing.Color.Red;
   lblExists.Text = "Oops! Our records show that you have already signed up for this service. Please check your information or contact your administrator for further assistance.";
}
即使数据库中没有记录表明我做错了,标签也会触发。

试试这个

SqlCommand oldcmd = new SqlCommand("SELECT COUNT(*) from dbo.registrar WHERE [MY ID] = @id", conn);
oldcmd.Parameters.Add("@id", SqlDbType.Int);
oldcmd.Parameters["@id"].Value = ID;

if ((int)oldcms.ExecuteScalar() >= 1)
{
    lblExists.Visible = true;
    lblExists.ForeColor = System.Drawing.Color.Red;
    lblExists.Text = "Oops! Our records show that you have already signed up for this service. Please check your information or contact your administrator for further assistance.";
}
else
{
    lblExists.Visible = false;
}
试试这个

SqlCommand oldcmd = new SqlCommand("SELECT COUNT(*) from dbo.registrar WHERE [MY ID] = @id", conn);
oldcmd.Parameters.Add("@id", SqlDbType.Int);
oldcmd.Parameters["@id"].Value = ID;

if ((int)oldcms.ExecuteScalar() >= 1)
{
    lblExists.Visible = true;
    lblExists.ForeColor = System.Drawing.Color.Red;
    lblExists.Text = "Oops! Our records show that you have already signed up for this service. Please check your information or contact your administrator for further assistance.";
}
else
{
    lblExists.Visible = false;
}

在运行此代码之前,标签是否确实不可见?您是否尝试在此处放置断点并使用调试器查看从数据库返回的数据实际是什么?您正在使用的场景中的
ID
类型和值是什么?您有两种解决方案,使用autoincrement创建主键,或创建storedproc以验证所有条件是否正常并选择data。这更安全,因为sql注入。您仍然没有回答有关sql注入的问题…我的解决方案解决了sql注入问题。在运行此代码之前,标签是否确实不可见?您是否尝试在此处放置断点并使用调试器查看从数据库返回的数据实际是什么?您正在使用的场景中的
ID
类型和值是什么?您有两种解决方案,使用autoincrement创建主键,或创建storedproc以验证所有条件是否正常并选择data。这更安全,因为sql注入。您仍然没有回答有关sql注入的问题…我的解决方案解决了sql注入问题。这很有效。谢谢但现在,当我点击向导中的上一个按钮时,它将我带到了第一步…不确定这似乎超出了这个问题的范围。如果它解决了你的问题,别忘了把它标记为答案。这很有效。谢谢但现在,当我点击向导中的上一个按钮时,它将我带到了第一步…不确定这似乎超出了这个问题的范围。如果它解决了你的问题,别忘了把它标记为答案。