我是C#的新手,对sql命令有些新意。我知道如何直接在数据库管理器中编写sql命令,但我无法弄清楚如何让它作为C#SqlCommand对象工作。这是我桌子的一个示例记录:
framework:
[...]
session:
save_path: %kernel.root_dir%/var/sessions
在我的应用程序中,我有一个按钮。当用户单击该按钮时,我希望与特定用户ID关联的整个Date行更新为当前日期。 “extractedId”实际上是我程序中存储用户ID的变量。所以我的问题是,在C#中这个sql命令的正确语法是什么,特别是考虑到“extractedId”是一个变量?这是我尝试过的代码变体之一。
+----+----------+----------+----------+
| ID | UserId | SiteName | Date |
+----+----------+----------+----------+
| 1 | 7698479 | Site1 | NULL |
| 2 | 7698479 | Site2 | NULL |
| 3 | 7698479 | Site3 | NULL |
| 4 | 7698479 | Site4 | NULL |
+----+----------+----------+----------+
答案 0 :(得分: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()
}
答案 1 :(得分:1)
以下是您可以使用的一些示例:
不归还使用:
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();