私はこの小さな問題を抱えています。 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インジェクション で開くこともできます。常にパラメーター化されたクエリを使用します。 Jeffは パラメーター化された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インジェクションを防ぐためにパラメーター化されたクエリを使用する
サンプルコードには多くの誤りがあります。
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();
コマンドの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);