2015-02-26 71 views
0

我已经创建了一种方法来在每次数据添加到数据库时检查数据库。原因是检查重复的主键(手动生成)。我面临的问题是即使数据存在于数据库中,该方法始终返回空值。在插入数据之前检查数据库时总是得到空值

这里是我的代码:

public int checkComRegnumberAvailable(string conRegnumber) 
{ 
    using (SqlConnection con = new SqlConnection(cs)) 
    { 
     SqlCommand cmd = con.CreateCommand(); 
     cmd.CommandText = "SELECT RegNumber FROM OtherCompanyData"; 
     con.Open(); 
     //string result = ((string)cmd.ExecuteScalar()); 
     string result = (string)cmd.ExecuteScalar(); 
     cmd.ExecuteNonQuery(); 

     if (result == null) 
     { 
      return 0; 
     } 

     if (result.Equals(conRegnumber)) 
     { 
      return 1; 
     } 


     else 
     { 
      return 2; 
     } 
    } 
} 
+2

你确定你的'选择RegNumber FROM OtherCompanyData'返回的数据?您是否在Management Studio上尝试过?如果'result'为'null',那意味着你的命令返回空集。 'cmd.ExecuteNonQuery()'在你的情况下是无用的。它什么都不做。 –

+0

当你使用'select'类时,你不能使用ExecuteScalar。 select将返回记录列表(即使记录只包含每个记录的一个值)。你实际上在寻找什么,如果一个带有'conRegnumber'值的记录已经存在? –

+0

@SteenTøttrup['ExecuteScalar'](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v = vs.110).aspx):_返回第一列结果集中的第一行由query_ – Grundy

回答

-1

你可以,以便从数据库retrive informatiom使用DataReader。下面的链接显示了如何在代码中使用它的一个很好的例子。

https://msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.110%29.aspx

+0

为什么使用reader如果从db得到一个字段? – Grundy

+2

不,它不_need_。 'ExecuteScalar'完全符合OP的要求。这是一个仅链接的答案。 [是否只包含其他链接的答案真的是“好答案”?](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers) –

+0

@SonerGönül现在编辑我的答案。在过去的经验中,我总是使用SqlDataReaders,同时从数据库中检索信息,无论是一个字段还是多个字段,因此我认为这将是OP正在寻找的。 –

相关问题