C# 我想用C中SQL Server表中的where类选择不同的maxno#

C# 我想用C中SQL Server表中的where类选择不同的maxno#,c#,sql-server,C#,Sql Server,如果表中没有结果,它应该返回零,但当前返回的是-1。我建立我的逻辑,如果有零做这件事,如果不是零意味着记录存在做这件事。我不熟悉C#和SQL Server。如果我的代码有任何错误,请告诉我 int UserExist = 0; using (SqlCommand cmd1 = new SqlCommand(@"select DISTINCT max(billno) AS bill from sale where ([date]='" + bildt.Text + "') ", con)) {

如果表中没有结果,它应该返回零,但当前返回的是-1。我建立我的逻辑,如果有零做这件事,如果不是零意味着记录存在做这件事。我不熟悉C#和SQL Server。如果我的代码有任何错误,请告诉我

int UserExist = 0;

using (SqlCommand cmd1 = new SqlCommand(@"select DISTINCT max(billno) AS bill from sale where ([date]='" + bildt.Text + "')  ", con)) {
    UserExist = (int)cmd1.ExecuteNonQuery();

    if (UserExist > 0) { 
        do this
    } else {   
        do some thing   
    }
}

您需要使用
ExecuteScalar
而不是
ExecuteNonQuery

ExecuteScalar
执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略

ExecuteNonQuery
针对连接执行Transact-SQL语句,并返回受影响的行数。对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数

int UserExist = 0;
using (SqlCommand cmd1 = new SqlCommand(@"select DISTINCT max(billno) AS bill from sale where ([date]='" + bildt.Text + "')  ", con))
{
     UserExist = (int)cmd1.ExecuteScalar();
     if (UserExist > 0)
     { 
        do this
     }
     else
     {   
       do some thing   
     }

}
还有一些附加的观点

  • 与其将参数用作字符串,不如尝试使用参数化查询。欲了解更多信息,请阅读
  • 我不熟悉C#,但我相信当您想进行更新、插入或删除时,可以使用ExecuteNonQuery()

    我认为你需要使用ExecuteReader


    我希望这对我有所帮助。

    在互联网上搜索后,我找到了解决方案

    int UserExist = 0;
                    using (SqlCommand cmd1 = new SqlCommand(@"select COUNT(*) from sale where ([date]=@date)  ", con))
                    {   cmd1.Parameters.AddWithValue("date", bildt.Text);
                        UserExist = (int)cmd1.ExecuteScalar();
                       if (UserExist > 0)
                        {using (SqlCommand cmd = new SqlCommand(@"select DISTINCT max(billno) AS bill from sale where ([date]='" + bildt.Text + "')  ", con))
                            { using (SqlDataReader dr = cmd.ExecuteReader())
                                {while (dr.Read())
                                    {
                                        String x = dr["bill"].ToString();
                                        txttemp.Text = x;
                                        int a;
                                        int.TryParse(txttemp.Text, out a);
                                        billno.Text = (a + 1).ToString();
                                        txttemp.Text = "";
                                    }
                                    dr.Close(); dr.Dispose();
                                }
                            }
                            }
                        else {do some thing }
    

    要从C#中的tsql查询中获得单值结果,需要调用ExecuteScalar


    您可以阅读更多内容

    您还应该为第二个
    cmd
    使用参数-特别是如果您需要将文本框文本值强制转换为日期。