Подготовленные заявления в SQL-Server через C # - PullRequest
2 голосов
/ 26 апреля 2011

Я нашел использование подготовленных операторов в PHP функцией mysqli_stmt_prepare (). как это в C # для SQL-сервера? Я нашел этот пример кода (с помощью команды параметризации). это то, что я ищу?

        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 в тексте команды.
спасибо

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

SQL Server (по крайней мере, через SqlClient) использует именованные параметры. Этот код действительно выполнит параметризованный запрос, но несколько замечаний:

  • формально он не был "подготовлен" (см. .Prepare()), но в любом случае вам это никогда не понадобится
  • некоторые из этих объектов IDisposable; у вас должно быть using s для них
  • DataTable (и адаптер, и т. Д.) Будет работать , но находится в состоянии упадка (с предпочтением сопоставленных классов, IMO)
  • видение DataGridView и SqlCommand в одном и том же методе, вероятно, означает, что ваш код пользовательского интерфейса слишком близок к коду доступа к данным; Я бы понизил уровень доступа к данным, лично

Например:

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;

(и привязать его к DataGridView обратно в интерфейсе)

Конечно, если значение параметра всегда 4, вы можете кодировать его непосредственно в TSQL.

0 голосов
/ 09 февраля 2013

Да, но это не способ использовать '?' знак.

...