[英]How can I return a single value from an SqlDataReader?
我忘了在單層應用程序中返回值。
public int Studentid()
{
try
{
SqlConnection con = new SqlConnection(connectionStr);
SqlCommand cmd = new SqlCommand("SELECT s_id FROM student where name = + ('" + Request.QueryString.ToString() + "')", con);
con.Open();
SqlDataReader dr = null;
con.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
//Want help hear how I return value
}
con.Close();
}
catch (Exception ex)
{
throw ex;
}
}
這是您的方法的一個版本,可以實現您所追求的目標。
public int GetStudentId()
{
var sql = string.Format("SELECT s_id FROM student where name = '{0}'", Request.QueryString);
using (var con = new SqlConnection(connectionStr))
using (var cmd = new SqlCommand(sql, con))
{
con.Open();
var dr = cmd.ExecuteReader();
return dr.Read() ? return dr.GetInt32(0) : -1;
}
}
除了重新拋出之外沒有對異常做任何事情都沒有必要使用try / catch(實際上你是通過使用throw ex;
來丟失原始堆棧跟蹤throw ex;
而不僅僅是throw;
而且,C# using
語句以更少的代碼行為您負責清理資源。
重要
將查詢字符串直接傳遞給SQL,這意味着任何人都可以在數據庫中執行隨機SQL,可能會刪除所有內容(或更糟)。 閱讀SQL注入 。
你應該使用using
塊,所以你是確保連接,命令和Reader是正確關閉。 然后,您可以從if
語句中返回值,並且在關閉對象之前不必將其存儲在變量中。
您只需打開一次連接即可。
您應該使用參數化查詢,而不是將值連接到查詢中。
public int Studentid() {
try {
using (SqlConnection con = new SqlConnection(connectionStr)) {
using (SqlCommand cmd = new SqlCommand("SELECT s_id FROM student where name = @Name", con)) {
cmd.Parameters.Add("@Name", DbType.VarChar, 50).Value = Request.QueryString.ToString();
con.Open();
using (SqlDataReader dr = cmd.ExecuteReader()) {
if (dr.Read()) {
return dr.GetInt32(0);
} else {
return -1; // some value to indicate a missing record
// or throw an exception
}
}
}
}
} catch (Exception ex) {
throw; // just as this, to rethrow with the stack trace intact
}
}
試試這個:
int s_id = (int) dr["s_id"];
int studId=0;
if(rdr.Read())
{
studId=rdr.GetInt32(rdr.GetOrdinal("s_id"));
}
返回單個值的最簡單方法是調用ExecuteScalar
。 您還應該修復SQL注入錯誤。 你的意思是編碼整個查詢字符串數組,還是只挑選一個值?
public int StudentId()
{
string sql = "SELECT s_id FROM student WHERE name = @name";
using (var con = new SqlConnection(connectionStr))
{
using (var cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@name", DbType.VarChar, 256).Value = Request.QueryString["name"];
con.Open();
return (int)cmd.ExecuteScalar();
}
}
}
if (dr.Read())
{
//Want help hear how i return value
int value = dr.GetInt32("s_id");
}
像這樣?
public int Studentid()
{
int studentId = -1;
SqlConnection con = null;
try
{
con = new SqlConnection(connectionStr);
SqlCommand cmd = new SqlCommand("SELECT s_id FROM student where name = + ('" + Request.QueryString.ToString() + "')", con);
SqlDataReader dr = null;
con.Open();
dr = cmd.ExecuteReader();
if (dr.Read())
{
studentId = dr.GetInt32(0);
}
dr.Close();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if(con != null)
con.Close();
con = null;
}
return studentId;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.