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);
您的示例代码有很多问题。
- 你有内联的SQL,它以一种主要的方式打开你的SQL注入。
-
您正在使用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();