如何将查询的搜索结果放在C#中的变量中?

时间:2014-02-21 20:01:45

标签: c# sql sql-server winforms

我想在数据表中搜索一些输入,如果找到了确切的数据,那么我想将这些数据放入另一个表中。如果没有,我将简单地清除相应的TextBox。到目前为止,我已经完成了这些论文。

    private void btn_InputConfirm_Click(object sender, EventArgs e) {
    string strConnection = @"Data Source=F_NOOB-PC\;Initial Catalog=ComShopDB;Integrated Security=True";
    SqlConnection objcon = new SqlConnection(strConnection);
    try {
        string strcmd1 = "SELECT partID,partAvailable FROM Parts WHERE partID LIKE '" + txtbox_ProductSerial.Text + "'AND partAvailable ='yes'";
        SqlCommand objcmd1 = new SqlCommand(strcmd1, objcon);
        objcon.Open();
        objcmd1.ExecuteNonQuery();
        objcon.Close();
    }
    catch (Exception ex) {
        MessageBox.Show(ex.Message);
    }
}

非常感谢一些帮助。提前谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用DataTable,使用ExecuteReader方法并将所有记录加载到DataTable,然后使用AsEnumerable和一些LINQ您可以获得结果作为List

DataTable dt = new DataTable();
var reader = objcmd1.ExecuteReader();
if(reader.HasRows)
{
    dt.Load(reader);
    var myValues = dt.AsEnumerable()
              .Select(d => new { 
                                 Id = d["partID"], 
                                 Available = d["partAvailable"]
                               }).ToList();
}

另外,您应该考虑使用parameterized queries来阻止SQL Injection次攻击。

答案 1 :(得分:0)

最简单的方法是使用DataAdapter,然后在Fill()DataTable上使用其DataSet功能。您无需打开和关闭连接,因为Fill()函数会为您执行此操作:

private void btn_InputConfirm_Click(object sender, EventArgs e)
{

  string strConnection = @"Data Source=F_NOOB-PC\;Initial Catalog=ComShopDB;Integrated Security=True";
  SqlConnection objcon = new SqlConnection (strConnection);

  try
  {
      //Writing command//
      string strcmd1 = "SELECT partID,partAvailable FROM Parts WHERE partID LIKE '" + txtbox_ProductSerial.Text + "'AND partAvailable ='yes'";
      System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(strcmd1, objcon);
      System.Data.DataSet ds = new System.Data.DataSet();
      aa.Fill(ds);
  }
  catch ( Exception ex )
  {
    MessageBox.Show (ex.Message);
  }