通过c#在SQL-Server中编写预处理语句

本文关键字:预处理 语句 SQL-Server 通过 | 更新日期: 2023-09-27 17:52:50

我发现PHP中使用了mysqli_stmt_prepare()函数。SQL-Server的c#是什么样的?我找到了这个代码示例(使用parameterize命令)。这是我要找的吗?

        SqlConnection conn = new SqlConnection();
        SqlCommand com = new SqlCommand();
        SqlDataAdapter dap = new SqlDataAdapter();
        DataTable tbl = new DataTable();
        SqlParameter param = new SqlParameter();
        conn.ConnectionString = @"Data Source=...";
        com.Connection = conn;
        com.CommandText = "select * from tbl1 where id<@id";
        com.Parameters.AddWithValue("@id",4);
        com.CommandType = CommandType.Text;
        dap.SelectCommand = com;
        conn.Open();
        dap.Fill(tbl);
        conn.Close();
        dataGridView1.DataSource = tbl;

如果没有,那么怎么办?
如果是,请告诉我如何使用字符?,而不是在命令文本中写@id。
由于

通过c#在SQL-Server中编写预处理语句

SQL Server(至少通过SqlClient)使用命名参数。这段代码确实会执行一个参数化查询,但有几点注意事项:

  • 它还没有正式"准备"(见.Prepare()),但你几乎永远不需要。
  • 其中几个是IDisposable;你应该为他们设置using s
  • DataTable(和适配器等)将工作,但在下降(与映射类优先,IMO)
  • 看到DataGridViewSqlCommand在相同的方法可能意味着你的UI代码太接近数据访问代码;我个人会把数据访问的东西推低一个级别
例如:

DataTable tbl = new DataTable();
using(var conn = new SqlConnection(@"Data Source=..."))
using(var com = conn.CreateCommand())
{
    com.CommandText = "select * from tbl1 where id<@id";
    com.Parameters.AddWithValue("@id",4);
    com.CommandType = CommandType.Text;        
    SqlDataAdapter dap = new SqlDataAdapter();   
    dap.SelectCommand = com;
    conn.Open();
    dap.Fill(tbl);
    conn.Close();     
}
return tbl;

(并将其绑定到UI的DataGridView)

当然,如果参数值总是4,您可以直接将其编码到TSQL中。

是的,但是没有办法使用'?"马克。