2013-04-08 82 views
0

您好我试图将数据库中的数据存储到变量,然后尝试处理它。 但不知何故变量不会从数据库中读取任何数据并给出其初始值。 继承人的代码将数据从数据库检索到变量与C#

int c1=0,c2=0.c3=0,c4=0,sum; 

if (rbFour.Checked == true) 
     { 
      proce = cmb1.Text + "," + cmb2.Text + "," + cmb3.Text + "," + cmb4.Text; 
      SqlDataAdapter d = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb1.ValueMember, Program.con); 
      DataTable t = new DataTable(); 
      foreach (DataRow row in t.Rows) 
      { 

      c1 = Convert.ToInt32(row[0]); 
     } 
     SqlDataAdapter qd = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb2.ValueMember, Program.con); 
     DataTable qt = new DataTable(); 
     foreach (DataRow row in qt.Rows) 
     { 

      c2 = Convert.ToInt32(row[0]); 
     } 
     SqlDataAdapter wd = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb3.ValueMember, Program.con); 
     DataTable wt = new DataTable(); 
     foreach (DataRow row in wt.Rows) 
     { 

      c3 = Convert.ToInt32(row[0]); 
     } 
     SqlDataAdapter ed = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb4.ValueMember, Program.con); 
     DataTable et = new DataTable(); 
     foreach (DataRow row in et.Rows) 
     { 

      c4 = Convert.ToInt32(row[0]); 
     } 
    } 
    else if (rbThree.Checked == true) 
    { 
     proce = cmb1.Text + "," + cmb2.Text + "," + cmb3.Text; 
     SqlDataAdapter d = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb1.ValueMember, Program.con); 
     DataTable t = new DataTable(); 
     foreach (DataRow row in t.Rows) 
     { 

      c1 = Convert.ToInt32(row[0]); 
     } 
     SqlDataAdapter qd = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb2.ValueMember, Program.con); 
     DataTable qt = new DataTable(); 
     foreach (DataRow row in qt.Rows) 
     { 

      c2 = Convert.ToInt32(row[0]); 
     } 
     SqlDataAdapter wd = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb3.ValueMember, Program.con); 
     DataTable wt = new DataTable(); 
     foreach (DataRow row in wt.Rows) 
     { 

      c3 = Convert.ToInt32(row[0]); 
     } 
    } 
    else if (rbTwo.Checked == true) 
    { 
     proce = cmb1.Text + "," + cmb2.Text; 
     SqlDataAdapter d = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb1.ValueMember, Program.con); 
     DataTable t = new DataTable(); 

     foreach (DataRow row in t.Rows) 
     { 

      c1 = Convert.ToInt32(row[0]); 
     } 
     SqlDataAdapter qd = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb2.ValueMember, Program.con); 
     DataTable qt = new DataTable(); 
     qd.Fill(qt); 
     foreach (DataRow row in qt.Rows) 
     { 

      c2 = Convert.ToInt32(row[0]); 
     } 

    } 
    else 
    { 
     proce = cmb1.Text; 
     SqlDataAdapter d = new SqlDataAdapter("Select Amount from addpro where SSN=" + cmb1.ValueMember, Program.con); 
     DataTable t = new DataTable(); 
     foreach (DataRow row in t.Rows) 
     { 

      c1 = Convert.ToInt32(row[0]); 
     } 
    }  

谁能帮助this.i使用相同的代码几天ago.it fine.but工作,现在我不知道什么不妥的地方。 我需要解决方案尽快任何人都可以帮助PLZ?

+0

不使用。在c2 = 0之后,c3 = 0“int c1 = 0,c2 = 0,c3 = 0,c4 = 0,sum;”,你得到的错误是什么... – Rahul 2013-04-08 12:39:31

+0

你错过了填充DataTable的代码'。有关示例,请参阅[此处](https://www.google.com/search?q=dataadapter+datatable)。 – mbeckish 2013-04-08 12:39:38

+0

thanx您的评论与填充()字段。桌子没有填满田地。 问题解决thanx @mbeckish – user2257581 2013-04-08 12:58:25

回答

0

你使用它

SqlDataAdapter d = new SqlDataAdapter("...", con); 
    DataTable t = new DataTable(); 
    d.Fill(t); // Here 

等为剩余的适配器之前需要Fill的DataTable。

然而,让我告诉一个不同的方法:

string sqlText = "Select Amount from addpro where [email protected]"; 
SqlCommand cmd = new SqlCommand(sqlText, Program.con); 
cmd.Parameters.AddWithValue("@ssn", cmb1.ValueMember); 
object result = cmd.ExecuteScalar(); 
if(result != null) 
    c1 = Convert.ToInt32(result); 

您在返回单行的单个值(如果找到)。这是SqlCommand的ExecuteScalar方法提供的使用场景。没有必要创建一个SqlAdapter,一个DataTable并用一行/值填充它。

此外,我已经删除了您的字符串连接,并使用参数化查询来避免Sql注入攻击。尽管在你的代码中有点不太可能,但在任何地方使用都是一个好习惯。

与上面的代码来代替它是很容易建立接收ComboBox控件的常用方法,应用所需的逻辑,并返回整数值

private int GetComboValue(ComboBox cbo) 
{ 
     // all the code above replacing cmb1 with cbo and c1 with ssnNumber 
     ..... 
     return ssnNumber; 
} 

,现在你可以使用

if (rbFour.Checked == true) 
{ 
    c1 = GetComboValue(cmb1); 
    c2 = GetComboValue(cmb2); 
    c3 = GetComboValue(cmb3); 
    c4 = GetComboValue(cmb4); 
} 
+0

问题解决。 thanx的额外代码。我会在我的申请中使用它 thant a tonne – user2257581 2013-04-08 12:59:57

0

使用fill()方法首先用dataadapter填充数据表,然后尝试访问数据行

ex:d.fill(dt);