c# - 通过 C# 在 SQL-Server 中准备语句

标签 c# php sql-server prepared-statement sqlcommand

我发现 mysqli_stmt_prepare() 函数在 PHP 中使用了准备好的语句。 在 C# for SQL-Server 中它是什么样的? 我找到了这个代码示例(使用参数化命令)。这就是我要找的吗?

        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。
谢谢

最佳答案

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

  • 尚未正式“准备好”(参见 .Prepare() ),但您几乎永远不需要这样做
  • 其中一些对象是 IDisposable;你应该为他们using
  • 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;

(并将其绑定(bind)到 UI 中的 DataGridView)

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

关于c# - 通过 C# 在 SQL-Server 中准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5786224/

相关文章:

c# - Windows Mobile - 串行端口通信

c# - 在 visual studio 中创建大括号的快捷方式

php - While 循环, undefined offset

javascript - 单击按钮刷新另一个网址

sql-server - 在 0-30 范围内设置一个值

SQL:根据转换表将 X 的所有值更新为 Y

c# - Dotnet-core默认使用2.0框架ubuntu

c# - WCF 中 BasicHttpBinding 和 NetHttpBinding 的区别

php - 如何通过 HP 或平板电脑拍摄照片并使用 PHP 自动上传?

sql - 没有获得适当的结构