检索int数据库并将其存储在C#中的变量中

时间:2017-07-26 08:30:59

标签: c# windows-forms-designer

我是C#的新手我想知道如何从数据库中检索整数值并将其存储在变量中。

之后,我需要使用此值添加已完成的另一个整数并将其存储回数据库。

我搜索了很多方法,但是给出的大多数方法都将它存储在数据网格视图中,但是我想在不显示的情况下进行计算。

SqlDataAdapter sql1 = new SqlDataAdapter("Select finaldays from LeaveTest where Id  = '" + comboBox1.SelectedText + "'", con);//it will take from the selection of combobox
DataTable dt = new DataTable();
sql1.Fill(dt);
con.Open();
TimeSpan timespan1;

timespan1 = dateTimePicker3.Value - dateTimePicker2.Value;
int TotalDays = timespan1.Days+1;//total days that are taken from the datetimepicker
MessageBox.Show(TotalDays.ToString());//displaying the date for testing

3 个答案:

答案 0 :(得分:2)

使用SqlCommand。如果您只希望检索一个值ExecuteScalar,那么这是最佳选择。另外,您应该使用参数来防止SQL注入。

SqlCommand cmd = new SqlCommand("Select finaldays from LeaveTest where Id  = @id", con);
cmd.Parameters.Add("@id", SqlDbType.VarChar);
cmd.Parameters["@id"].Value = comboBox1.SelectedText;
try
{
    conn.Open();
    int result = (Int32)cmd.ExecuteScalar();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

如果每个ID可能有多个结果,则应使用SqlReader并将结果存储在List中(如示例中所示),或者在检索结果时使用它们:

SqlCommand cmd = new SqlCommand("Select finaldays from LeaveTest where Id  = @id", con);
cmd.Parameters.Add("@id", SqlDbType.VarChar);
cmd.Parameters["@id"].Value = comboBox1.SelectedText;
try
{
    List<int> resultList = new List<int>();
    conn.Open();
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        resultList.Add((Int32)reader[0]);
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

答案 1 :(得分:0)

你走在正确的轨道上,但这确实是你可以在Google上轻松找到答案的事情......

现在你已经填满了DataTable,你只需要获得对列值的引用。

FinalDays

由于您是C#的新手,我将解释这是做什么的。

这是一个“语法糖”,它试图将DataTable列中的值(即从数据库获得的值)解析为整数,并将解析后的整数值输出到@Override public Void call() throws Exception { InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); readHeader(reader); System.out.println("incoming message : " + header.get("Method")); // read binary Content int bytesRead = 0; int bytesToRead = Integer.parseInt(header.get("Content-Length")); content = new byte[bytesToRead]; while (bytesRead < bytesToRead) { int result = in.read(content, bytesRead, bytesToRead - bytesRead); if (result == -1) break; // end of stream bytesRead += result; } return null; } 。如果解析工作(即,该值实际上是一个数字),则FinalDays将设置为数据库中的值,如果它不起作用,则FinalDays将设置为0。

答案 2 :(得分:0)

大家好我发现了另一个适合我的替代方案......希望能帮助遇到与我相同困难的其他人

        con.Open();

        string sqlSelectQuery = "Select * FROM LeaveTest";
        SqlCommand cmd = new SqlCommand(sqlSelectQuery, con);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            TimeSpan timespan1;
            timespan1 = dateTimePicker3.Value - dateTimePicker2.Value;
            int totaldays = timespan1.Days;
            textBox2.Text = (dr["finaldays"].ToString());
            int finaldays = Convert.ToInt32(textBox2.Text)+totaldays;
       //textbox2 is a temporary textbox(which is invisible)that is used to put the value finaldays in from the database

            string sql1 = ("Update LeaveTest SET finaldays = '"+ finaldays + "'  WHERE Id='" + comboBox1.Text + "'"); //updating the finaldays in database
            SqlCommand cmd2 = new SqlCommand(sql1, con);
            con.Close();
            con.Open();
          SqlDataReader dr2 =cmd2.ExecuteReader();
            con.Close();


        }
        con.Close();

代码将计算2个日期时间选择器的总天数(总计天数)。数据库中的天数将被检索并添加总天数(最后一天)。我的解释可能有点不好但我希望你伙计们会从这段代码中受益。:)