2016-04-01 9 views
0

私はC#の初心者ですが、sqlコマンドには新しく追加されました。私はデータベースマネージャに直接SQLコマンドを書く方法を知っていますが、C#SqlCommandオブジェクトとして動作させる方法を理解できませんでした。テーブルのレコードの例を次に示します。C#で特定のSQLコマンドを書くにはどうしたらいいですか?

+----+----------+----------+----------+ 
| ID | UserId | SiteName | Date  | 
+----+----------+----------+----------+ 
| 1 | 7698479 | Site1 | NULL | 
| 2 | 7698479 | Site2 | NULL | 
| 3 | 7698479 | Site3 | NULL | 
| 4 | 7698479 | Site4 | NULL | 
+----+----------+----------+----------+ 

私のアプリケーションにはボタンがあります。ユーザーがボタンをクリックすると、特定のユーザーIDに関連付けられた日付行全体を現在の日付に更新する必要があります。 "extractedId"は実際にユーザーIDを格納するプログラム内の変数です。だから私の質問は、C#のこのSQLコマンドの正しい構文は何か、特に "extractedId"が変数であると考えているのでしょうか?ここに私が試みたコードのバリエーションがあります。ここで

SqlCommand myCommand = new SqlCommand("UPDATE myTable SET Date = getdate() WHERE UserId = extractedId", myConnection); 
+0

[SqlCommand.ExecuteScalar](https://msdn.microsoft.com/enを参照してください。 -us/library/system.data.sqlclient.sqlcommand.executescalar(v = vs.110).aspx)を実行します。 – Igor

+1

代わりに[SqlCommand.ExecuteNonQuery](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery(v = vs.110).aspx)を使用しないでください。 ? ExecuteScalarは、行を挿入するときにSELECTまたはIDを使用して値を返すためのものです。 ExecuteNonQueryを使用すると、SqlCommandを実行するだけで済みます。 – Dresden

答えて

1

あなたが使用できるいくつかの例です:1つの戻り値の使用については

Con.Open(); 
Cmd.CommandText = SQL_command; 
Cmd.ExecuteNonQuery(); 
Con.Close(); 

Con.Open(); 
Cmd.CommandText = SqlCommand; 
object Ret = Cmd.ExecuteScalar(); 
Con.Close(); 

については

ノンリターン使用する場合は、 m値は、使用返しultiple:

Con.Open(); 
Cmd.CommandText = SqlCommand; 
SqlDataReader Reader = Cmd.ExecuteReader(); 
List<object[]> Ret = new List<object[]>(); 
int Columns = Reader.FieldCount; 
while (Reader.Read()) 
{ 
    object[] RetItem = new object[Columns]; 
    for (int i = 0; i < Columns; i++) 
    { 
     RetItem[i] = Reader[i]; 
    } 
    Ret.Add(RetItem); 
} 
Reader.Close(); 
Con.Close(); 
3

あなたがコマンドに追加して、パラメータを処理する必要があります。

var commandText = "UPDATE myTable SET Date = getdate() WHERE UserId = @extractedId"; 
    SqlCommand myCommand = New SqlCommand(commandText); 
    myCommand.CommandType = CommandType.Text; 
    myCommand.CommandTimeout = 300; 
    myCommand.Connection = New SqlConnection(myConnection); 
    myCommand.Parameters.AddWithValue("@extractedId", extractedId) 
    try 
    { 
     var result = myCommand.ExecuteNonQuery(); 
    } 
    catch(Exception e) 
    { 
     //do something with exception 
    } 
    finally 
    { 
    myCommand.Connection.Close() 
    } 
+0

更新が失敗した場合、実際には何らかのエラー処理を行うことができます。私はこの例が好きです。 ExecuteNonQueryを使用しているときにエラーをキャッチすることに問題がある人もいますので、[例外がキャッチされない]ことに注意してください(http://stackoverflow.com/questions/27383472/executenonquery-exception-not-caught-by-try-catch) (@H。NetIrrigate) – Dresden

+0

バターのように働いた。どうもありがとう! –

関連する問題