如何在C#中编写特定的sql命令?

如何在C#中编写特定的sql命令?,c#,sql,sql-server,C#,Sql,Sql Server,我不熟悉C#,对sql命令也有些陌生。我知道如何直接在数据库管理器中编写sql命令,但我还没有弄清楚如何将其作为C#SqlCommand对象使用。下面是我的表格的一个示例记录: +----+----------+----------+----------+ | ID | UserId | SiteName | Date | +----+----------+----------+----------+ | 1 | 7698479 | Site1 | NULL | |

我不熟悉C#,对sql命令也有些陌生。我知道如何直接在数据库管理器中编写sql命令,但我还没有弄清楚如何将其作为C#SqlCommand对象使用。下面是我的表格的一个示例记录:

+----+----------+----------+----------+
| 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);

以下是一些您可以使用的示例:

对于非退货使用:

Con.Open();
Cmd.CommandText = SQL_command;
Cmd.ExecuteNonQuery();
Con.Close();
对于一个返回值使用:

Con.Open();
Cmd.CommandText = SqlCommand;
object Ret = Cmd.ExecuteScalar();
Con.Close();
对于多个返回值,请使用:

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();
Con.Open();
Cmd.CommandText=SqlCommand;
SqlDataReader=Cmd.ExecuteReader();
List Ret=新列表();
int Columns=Reader.FieldCount;
while(Reader.Read())
{
object[]RetItem=新对象[列];
对于(int i=0;i
以下是一些您可以使用的示例:

对于非退货使用:

Con.Open();
Cmd.CommandText = SQL_command;
Cmd.ExecuteNonQuery();
Con.Close();
对于一个返回值使用:

Con.Open();
Cmd.CommandText = SqlCommand;
object Ret = Cmd.ExecuteScalar();
Con.Close();
对于多个返回值,请使用:

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();
Con.Open();
Cmd.CommandText=SqlCommand;
SqlDataReader=Cmd.ExecuteReader();
List Ret=新列表();
int Columns=Reader.FieldCount;
while(Reader.Read())
{
object[]RetItem=新对象[列];
对于(int i=0;i
您需要通过将参数添加到命令中来处理该参数:

  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()
  }

您需要通过将参数添加到命令来处理该参数:

  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()
  }

开始吧。他不想用它来代替吗?ExecuteScalar更适合在插入行时返回带有SELECT或id的值。使用ExecuteOnQuery,您可以只运行提供的SqlCommand。请参阅以开始。他不想改用它吗?ExecuteScalar更适合在插入行时返回带有SELECT或id的值。使用ExecuteOnQuery,您可以只运行提供的SqlCommand。如果更新失败,您实际上可以执行一些错误处理。我喜欢这个例子。有些人在使用ExecuteOnQuery时会遇到捕获错误的问题,所以请注意(@H.netirigate),如果更新失败,您实际上可以执行一些错误处理。我喜欢这个例子。有些人在使用ExecuteOnQuery时遇到了捕获错误的问题,所以请注意(@H.netirigate)