2013-04-30 1 views
1

В ссылке на мой вопрос,Как добавить параметр обновления для SqlDataSource в C#

How to get boundfield value, or am I totally wrong?

Я пытаюсь добавить параметр обновления к SqlDataSource с помощью C# вместо ASP.NET, но я получаю сообщение об ошибке,

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    int userID = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values["userID"].ToString()); 
    string userName = ""; 
    string city = ""; 
    string updateStatement = "Update myTable set [email protected], [email protected] where [email protected]"; 

    foreach (DictionaryEntry entry in e.NewValues) 
    { 
     if (entry.Key == "userName") 
      userName = entry.Value.ToString(); 
     if (entry.Key == "city") 
      city = entry.Value.ToString(); 
    } 

    using (SqlDataSource ds = new SqlDataSource(ConnectionString(), updateStatement)) 
    { 
     ds.UpdateParameters.Add("@userName"); 
     ds.UpdateParameters.Add("@city"); 
     ds.UpdateParameters.Add("@UserId"); 
    } 

    gvDetails.EditIndex = -1; 
    BindData(); 
} 

Как я могу передать значения параметров: S

ds.UpdateParameters.Add("@userName"); 
     ds.UpdateParameters.Add("@city"); 
     ds.UpdateParameters.Add("@UserId"); 

Но я не знаю правильного синтаксиса, может ли кто-нибудь направить меня в правильном направлении, пожалуйста,

+0

Что такое 'ошибка'? –

+0

Неправильный синтаксис, я не могу добавить параметры к SQLDataSource, как это. – Mathematics

ответ

3

Я думаю, вы должны использовать SqlCommand вместо SqlDataSource:

using (SqlConnection connection = new SqlConnection(ConnectionString()) 
    using (SqlCommand cmd = new SqlCommand(updateStatement, connection)) { 
    connection.Open(); 
    cmd.Parameters.Add(new SqlParameter("@Name", userName)); 
    cmd.Parameters.Add(new SqlParameter("@city", city)); 
    cmd.Parameters.Add(new SqlParameter("@UserId", userID)); 
    cmd.ExecuteNonQuery(); 
    } 
+0

+1, Можете ли вы также объяснить, почему я должен использовать SQLCommand, а не SqlDataSource, пожалуйста, – Mathematics

+0

SqlDataSource предназначен для привязки данных к элементам управления в WebForm. Это то, что вы делаете, особенно когда вы пытаетесь сделать это вручную. Если вы хотите пойти по маршруту привязки данных, это правильный выбор. –

+0

1+ не нужно создавать SqlDataSource здесь. – Damith

0

Вы не можете добавить параметры к SqlDataSource. Вместо этого вы можете добавить SqlCommand. Попробуйте что-то подобное:

string updateStatement = "Update myTable set [email protected], [email protected] where [email protected]"; 

using (SqlDataSource ds = new SqlDataSource(ConnectionString(), updateStatement)) 
{  
     SqlCommand cmd = new SqlCommand(updateStatement); 
     cmd.Parameters.Add("@userName"); 
     cmd.Parameters.Add("@city"); 
     cmd.Parameters.Add("@UserId"); 
     cmd.Paramters["@City"].Value = city; 
     cmd.Paramters["@userName"].Value = userName; 
     cmd.Paramters["@UserId"].Value = userID; 

     GridView1.DataSource = ds; 
     GridView1.DataBind(); 
} 
+0

спасибо, но вы сказали, что я не могу добавить параметры в SQLDataSource? это что-то еще, http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updateparameters(v=vs.80).aspx, возможно, я ошибаюсь? – Mathematics

+0

С помощью свойства «UpdateParameters» вы можете указать, какие параметры будут использоваться в вашей команде обновления вашего SqlDataSource. –

+1

извините, но я не совсем уверен, как выше код будет работать, поскольку он ничего не выполняет. но я даю ему все равно, спасибо – Mathematics

1

, если вы хотите использовать SqlDataSource, то я считаю, что синтаксис.

ds.UpdateParameters.Add("userName", "someDefaultValue"); 

Нет «@», и вы можете указать значение по умолчанию.