【问题标题】:winforms C# using sql server 2008winforms C# 使用 sql server 2008
【发布时间】:2014-03-10 14:01:57
【问题描述】:
private void fillcode()
{
    try
    {
        SqlConnection con = new SqlConnection("Data Source=ANISH;Initial Catalog=HM;Integrated Security=True");
        con.Open();
        string s = "select max(CustomerId) as Id from CustomerDetails";
        SqlCommand cmd = new SqlCommand(s, con);
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();
        int i = Convert.ToInt16(dr["Id"].ToString());
        sid.Text = (i + 1).ToString();
        con.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我正在使用此代码,但如果我的表中没有数据,它将无法接受。 因此,如果没有数据,我想使用它应该将 CustomerId 设为 1

【问题讨论】:

  • 测试系统中是否有ID。如果没有,则使用 1。顺便说一句,您应该编辑问题的标题,使其更能描述您的问题,而不是一堆标签。
  • 您似乎正在尝试根据表中该列中的最后一个最高值创建递增的客户 ID。我强烈建议让 SQL Server 通过将列设置为您的 IDENTITY 来为您执行此操作。它将以更安全的方式为您完成此操作。

标签: c# sql sql-server winforms if-statement


【解决方案1】:

它将是NULL 没有行,所以你可以:

"select isnull(max(CustomerId), 1) as Id from CustomerDetails"

您还应该查看专为单一结果设计的ExecuteScalar

【讨论】:

  • 好! 但是...如果他稍后需要写入 ID 列,这将变得很棘手,因为执行 isnull 会使该列只读。
  • 是的,这很好,我认为这是一个只读查找。
  • 我建议把1改成0
  • 考虑到列的可能功能,这可能是一个安全的假设,但您永远不知道。 ExecuteScalar 正是 OP 需要大量清理它的原因。
【解决方案2】:

这样试试

private void fillcode()
{
    try
    {
        SqlConnection con = new SqlConnection("Data Source=ANISH;Initial Catalog=HM;Integrated Security=True");
        con.Open();
        string s = "select max(CustomerId) as Id from CustomerDetails";
        SqlCommand cmd = new SqlCommand(s, con);
        SqlDataReader dr = cmd.ExecuteReader();
        if(dr.Read())
        {
            int i = Convert.ToInt16(dr["Id"].ToString());
            sid.Text = (i + 1).ToString();
        }
        else
        {
            sid.Text = "1"
        } 
        con.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

【讨论】:

  • 如果我使用上面的代码它不起作用它显示“输入字符串格式不正确”所以我现在可以做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2012-11-20
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多