我发现 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)- 在同一方法中看到
DataGridView
和SqlCommand
可能意味着您的 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/