您好我正在尝试将数据库中的数据存储到变量中,然后尝试处理它。 但不知何故,变量不会从数据库中读取任何数据并给出其初始值。 继承人的代码
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]);
}
}
任何人都可以帮助这个。几天前我使用相同的代码。工作正常。但现在我不知道它有什么问题。 我需要解决方案asap任何人都可以帮助PLZ?
答案 0 :(得分:0)
在使用DataTable之前,您需要Fill
SqlDataAdapter d = new SqlDataAdapter("...", con);
DataTable t = new DataTable();
d.Fill(t); // Here
以及其他适配器等。
但是,让我展示一种不同的方法:
string sqlText = "Select Amount from addpro where SSN=@ssn";
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注入攻击。尽管如此,在您的代码中有点不太可能,在任何地方都可以使用它。
使用上面的代码,很容易构建一个接收组合框控件的常用方法,应用所需的逻辑并返回整数值
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);
}
答案 1 :(得分:0)
使用fill()方法首先使用dataadapter填充数据表,然后尝试访问数据行
ex:d.fill(dt);