2017-01-09 2 views
1

Я пытался вставить значения в файл базы данных сервера в Database.mdf SQL с помощью DataGridView из нескольких текстовых полей перед загрузкой их в диаграмме, но сначала он возвращается сообщение об ошибке:Вставка значения в Database.mdf C#

System.Data.SqlClient.SqlCommand' does not contain a definition for 'Open' and no extension method 'Open' accepting a first argument of type 'System.Data.SqlClient.SqlCommand' could be found (are you missing a using directive or an assembly reference?) C:\Users\DELL\Documents\Visual Studio 2012\Projects\WindowsFormsApplication6\WindowsFormsApplication6\Form1.cs 65 44 WindowsFormsApplication6

Но тогда эта ошибка исчезла (без меня меняла какой-либо код, но просто перекомпилировала его), и теперь эта функция (то есть sendrow()) бесполезна, ничего не делая абсолютно ничего, даже не давая ошибки. Я полагаю, что если ему удастся записать его в базу данных, я мог бы увидеть его на datagridView в форме.

SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder(); 
csb.ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\DELL\Documents\Visual Studio 2012\Projects\WindowsFormsApplication6\WindowsFormsApplication6\Database1.mdf;Integrated Security=True"; 

using (SqlConnection conn = new SqlConnection(csb.ConnectionString)) 
{ 
    conn.Open(); 

    using (SqlCommand cmd = new SqlCommand("INSERT INTO Stocks (Open, High, Low, Close, Day) VALUES (@Open, @High, @Low, @Close, @Day)")) 
    { 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = conn; 

     // cmd.Parameters.Add(new SqlParameter("@Open", SqlDbType.VarChar, 40)); //using this way "The variable name '@Open' has already been declared. Variable names must be unique within a query batch or stored procedure." 
     // cmd.Parameters.AddWithValue("@Open", textBox13.Text); 
     cmd.Parameters.AddWithValue("@Open", textBox13.Text);   
     cmd.Parameters.AddWithValue("@High", textBox14.Text); 
     cmd.Parameters.AddWithValue("@Low", textBox15.Text); 
     cmd.Parameters.AddWithValue("@Close", textBox16.Text); 

     cmd.ExecuteNonQuery(); // Incorrect syntax near the keyword 'Open'. 
    } 

    stocksTableAdapter.Update(database.Stocks); //LINE***added later but still getting "Incorrect syntax near the keyword 'Open'." 
} 

В базе данных, таблица добавлено называется Stocks, с 5 столбцов (Id, Open, High, Low, Close). Я прошу прощения, если я пропущу что-то очевидное, так как я довольно новичок в SQL Server. База данных создается как база данных услуг на базе и нет никакого значения, учитывая, кроме создания Open, High, Low, Close, Day столбцов и определение их вклада в Decimal(18,4) для Open, High, Low, Close и Datetime для Day (но это не дело какое-либо значение в коде еще)

+0

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

+0

Вы можете напрямую проверить содержимое таблицы, чтобы увидеть, работает ли вставка? – Searching

+0

Я привязал таблицу database.stocks из верхних правых задач datagridview. Я взял его из кода, где его дизайн принимает вход в datagridview при его запуске, а затем сохраняет его в базе данных. – bergdi

ответ

1

Open и Close: reserved T-SQL keywords, которые вы должны NOT использовать в качестве имен таблиц и/или столбцов. Попробуйте использовать что-то более интуитивно понятным для вашего бизнес-кейса - например. OpenValue и CloseValue или что-то в этом роде.

Если настаивает на использование этих имен, то вы должны их в квадратных скобках: [Open] и [Close]

string query = "INSERT INTO dbo.Stocks ([Open], High, Low, [Close], Day) " + 
       "VALUES (@Open, @High, @Low, @Close, @Day);"; 

using (SqlCommand cmd = new SqlCommand(query, conn)) 
{ 
    ..... 
} 
0

Попробуйте

cmd.Parameters.Add(new SqlParameter("@Open", "Value")); 
0

Если это не более как это?

com.CommandText = (@"INSERT INTO Stock (Prod_ID, Prod_Name, Prod_Cat, Supplier, Cost, Price_1, Price_2, Price_3) VALUES ('"+ProdID.Text+"','"+ProdName.Text+"','"+ProdCat.Text+"','"+ProdSup.Text+"','"+ProdCost.Text+"','"+ProdPrice1.Text+"','"+ProdPrice2.Text+"','"+ProdPrice3.Text+"');")); 

Просто пример ...

Смежные вопросы