Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# ExecuteReader能否在C中的if条件下工作#_C#_Asp.net - Fatal编程技术网

C# ExecuteReader能否在C中的if条件下工作#

C# ExecuteReader能否在C中的if条件下工作#,c#,asp.net,C#,Asp.net,我想从数据库中删除数据,但在C#asp.net中执行ExecuteReader之前,我想检查数据是否存在 我想这样工作,如果有任何可能的解决办法,请帮助 SqlCommand cmd = new SqlCommand("spDelete", scon); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@id", TextBox6.Text.ToString()); scon.Open();

我想从数据库中删除数据,但在C#asp.net中执行
ExecuteReader
之前,我想检查数据是否存在

我想这样工作,如果有任何可能的解决办法,请帮助

SqlCommand cmd = new SqlCommand("spDelete", scon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", TextBox6.Text.ToString());
scon.Open();
//want to check here before execution. is this possible?

if(cmd.ExecuteReader() == TextBox1.Text)
{
    // then execution
    rdr = cmd.ExecuteReader();
}
else 
{
    Lblmsg.Text =- "Record doesn't exist";
}

我想你是在检查阅读器是否包含记录。如果是这样的话,您可以使用如下代码来完全填充:

rdr = cmd.ExecuteReader();
if(rdr.HasRows)
    {
      //execute the statements;             
    }
    else 
    {
       Lblmsg.Text =- "Record doesn't exist";
    }

您似乎正在存储过程中运行delete命令。在这种情况下,您不想使用ExecuteReader,但是。这将返回生效的行数,如果它等于1,则表示您删除了1行

根据要使用的存储过程而定。仔细阅读,看看你是怎么想的


我假设您清理了用户输入,并使用代码验证文本框值是否为数字?

您使用了错误的方法来执行存储过程。在您的情况下,正确的方法是返回受命令影响的记录数。如果存储过程删除该记录,则返回值将不为零,否则(没有与ID参数匹配的记录)返回值将为零

using(SqlCommand cmd = new SqlCommand("spDelete", scon))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@id", TextBox6.Text);
    scon.Open();
    int numRecordsDeleted = scon.ExecuteNonQuery();

    if(numRecordsDeleted == 0)
        Lblmsg.Text = "Record doesn't exist";
    else
        Lblmsg.Text = "Record deleted";
}
最后,您确定您的ID字段是字符串吗?使用AddWithValue传递参数是危险的,您应该始终指定正确的数据类型。 例如,如果ID是一个整型数据类型的字段,那么您应该写入

cmd.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(TextBox6.Text);

如果添加存储过程的代码,您可能会更清楚。
Create proc spDelete@id int as Begin Delete from employees,其中id=@id end
@Steve存储过程代替调用ExecuteReader,调用ExecuteOnQuery并获取返回值。如果为零,则没有要删除的记录。文本框模式设置为数字。该模式不起作用。读卡器执行后,它从不检查编码是否正确