select语句的返回值

我有这个小问题。 我想将select语句的结果值检索到字符串变量中。 像这样

OleDbCommand cmd1 = new OleDbCommand(); cmd1.Connection = GetConnection(); cmd1.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text; cmd1.ExecuteNonQuery(); 

我希望将选定的处理值放入字符串变量中。 我怎样才能做到这一点。 谢谢

使用ExecuteReader()而不是ExecuteNonQuery()ExecuteNonQuery()仅返回受影响的行数。

 try { SqlDataReader dr = cmd1.ExecuteReader(); } catch (SqlException oError) { } while(dr.Read()) { string treatment = dr[0].ToString(); } 

或者更好的是,使用using语句 。

 using(SqlDataReader dr = cmd1.ExecuteReader()) { while(dr.Read()) { string treatment = dr[0].ToString(); } } 

但是,如果您的SqlCommand只返回1列,则可以使用ExecuteScalar()方法。 它返回第一行的第一列,如下所示: –

 cmd.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text; string str = Convert.ToString(cmd.ExecuteScalar()); 

您也可以打开SQL注入代码。 始终使用参数化查询。 杰夫有一篇很酷的博客文章叫做给我参数化SQL,或者给我死 。 请仔细阅读。 另请阅读DotNetPerl SqlParameter文章。 在您处理查询时,SQL注入非常重要。

执行标量:从数据库方法获取单个值以从数据库中检索单个值(例如,聚合值)。

 cmd1.Connection = GetConnection(); cmd1.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text; if(cmd.ExecuteScalar()==null) { var treatment = cmd.ExecuteScalar(); } 

其他方式: ExecuteReader()

 try { cmd1.CommandText ="SELECT treatment FROM appointment WHERE patientid=@patientID"; cmd1.Parameters.AddWithValue("@patientID", this.DropDownList1.SelectedValue); conn.Open(); SqlDataReader dr = cmd1.ExecuteReader(); while (dr.Read()) { int PatientID = int.Parse(dr["treatment"]); } reader.Close(); ((IDisposable)reader).Dispose();//always good idea to do proper cleanup } catch (Exception exc) { Response.Write(exc.ToString()); } 

答案:

 String res = cmd1.ExecuteScalar(); 

注释:使用参数化查询来防止sql注入

您只需要使用命令的ExecuteScalar方法 – 这将为您提供结果集的第一行和第一列的值。

 OleDbCommand cmd1 = new OleDbCommand(); cmd1.Connection = GetConnection(); cmd1.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text; var result = cmd1.ExecuteScalar(); 

如果您的SQL语句返回多个行/列,则可以使用ExecuteReader()。

你需要使用OleDbAdapter。

 string connection = "your connection"; string query = "SELECT treatment FROM appointment WHERE patientid = " + text; OleDbConnection conn = new OleDbConnection(connection); OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.SelectCommand = new OleDbCommand(query, conn); adapter.Fill(dataset); 

您的示例代码有很多问题。

  1. 你有内联的SQL,它以一种主要的方式打开你的SQL注入。
  2. 您正在使用ExecuteNonQuery(),这意味着您无法获得任何数据。

      string sSQL = "SELECT treatment FROM appointment WHERE patientid = @patientId"; OleDbCommand cmd1 = new OleDbCommand(sSQL, GetConnection()); // This may be slight different based on what `GetConnectionReturns`, just put the connection string in the second parameter. cmd1.Parameters.AddWithValue("@patientId", text); SqlDataReader reader = cmd1.ExecuteReader(); string returnValue; while(reader.Read()) { returnValue = reader[0].ToString(); } 
 SqlConnection dbConnect = new SqlConnection("your SQL connection string"); string name = " 'ProjectName' "; string strPrj = "Select e.type, (e.surname +' '+ e.name) as fulln from dbo.tblEmployees e where id_prj = " + name; SqlCommand sqlcmd = new SqlCommand(strPrj, dbConnect); SqlDataAdapter sda = new SqlDataAdapter(strPrj, dbConnect); ds = new DataSet(); sda.Fill(ds); dbConnect.Open(); sqlcmd.ExecuteNonQuery(); dbConnect.Close();