5

select ステートメントの結果の値を文字列変数に取得したいと考えています。このような:

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

選択した治療値を文字列変数に入れたいです。これどうやってするの?

4

7 に答える 7

21

を使用し、使用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のみを返す場合は、メソッドを使用できます。次のように、最初の行の最初の列を返します。1ExecuteScalar()

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

また、 SQL インジェクションに対してコードを開くこともできます。常にパラメーター化されたクエリを使用します。Jeff は、 Give me parameterized SQL, or give me Deathというクールなブログ記事を書いています。よくお読みください。DotNetPerl SqlParameter の記事もお読みください。SQL インジェクションは、クエリを実行するときに非常に重要です。

于 2012-12-26T13:30:58.120 に答える
4

スカラー: データベースから単一の値を取得するメソッドを実行して、データベースから単一の値 (集計値など) を取得します。

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());
}
于 2012-12-26T13:36:13.473 に答える
1

答え:

String res = cmd1.ExecuteScalar();

備考: パラメータ化されたクエリを使用して、SQL インジェクションを防ぎます

于 2012-12-26T13:31:49.197 に答える
0
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();
于 2014-10-27T07:33:21.717 に答える
0

コマンドの ExecuteScalar メソッドを使用するだけで、結果セットの最初の行と列に値が表示されます。

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

SQL ステートメントが複数の行/列を返す場合は、ExecuteReader() を使用できます。

于 2012-12-26T13:31:47.633 に答える
0

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);
于 2012-12-26T13:35:50.483 に答える
0

サンプルコードには多くの問題があります。

  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();
        }
    
于 2012-12-26T13:36:26.460 に答える