Ошибка в запросе на обновление [Использование String.Format] - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь написать заявление об обновлении для вставки данных из таблицы сетки asp.net в базу данных sql server 2005. Но это показывает мне ошибку. Пожалуйста, скажите мне, как решить.is- Индекс (на основе нуля) должен быть больше или равен нулю и меньше размера списка аргументов.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Ваш синтаксис для строки. Формат неверен - каждый параметр после шаблона строки должен быть сам по себе, без двойных кавычек, окружающих их все ...

Это будет работать (обратите внимание, я удалилдвойные кавычки непосредственно перед 'productname.Text' и после 'supplierid.Text'):

String.Format("Update Products SET ProductName={0}, UnitsInStock={1}, UnitsOnOrder={2}, ReorderLevel={3} WHERE ProductID={4} AND SupplierID={5}", 
    productname.Text, unitsinstock.Text, unitsonorder.Text, 
    recorderlevel.Text, employeeid.Text, supplierid.Text);
0 голосов
/ 30 сентября 2011

Вы пропустили аргументы,

Например,

str=String.Format("{0} {1}",arg1,arg2);

Не используйте жестко запрограммированные строки sql.Попробуйте изучить / использовать параметризованные запросы.

РЕДАКТИРОВАТЬ:

string ConnectionString = "put_connection_string";
using (SqlConnection con = new SqlConnection(ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand())
    {
        string sql = "Update Products SET 
                ProductName=@ProductName,
                UnitsInStock=@UnitsInStock,
                UnitsOnOrder=@UnitsOnOrder,
                ReorderLevel=ReorderLevel 
                WHERE ProductID=ProductID AND SupplierID=@SupplierID";
        cmd.CommandText = sql;
        cmd.Connection = con;
        cmd.Parameters.Add("@ProductName", System.Data.SqlDbType.VarChar, 50).Value =productname.Text;
        cmd.Parameters.Add("@UnitsInStock", System.Data.SqlDbType.Int).Value =unitsinstock.Text;
        cmd.Parameters.Add("@UnitsOnOrder", System.Data.SqlDbType.Int).Value =unitsonorder.Text;
        cmd.Parameters.Add("@ReorderLevel ", System.Data.SqlDbType.Int).Value =recorderlevel.Text;
        cmd.Parameters.Add("@ProductID", System.Data.SqlDbType.Int).Value =producteid.Text;
        cmd.Parameters.Add("@SupplierID", System.Data.SqlDbType.Int).Value =supplierid.Text;

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }
}

РЕДАКТИРОВАТЬ: Что такое C # с использованием блока?

  1. Если тип реализует IDisposableавтоматически удаляет его
  2. Предоставляет удобный синтаксис, обеспечивающий правильное использование IDisposable объектов.
  3. Избегание проблем с помощью оператора Using
...