INSERT INTO NStacks (NStacksName, NStacksItem) VALUES ((textBox1.Text) + (File))
Вы указываете БД на INSERT INTO
таблицу NStacks
VALUES
"(textBox1.Text) + (File)
" ТОЛЬКО в столбце NStacksName
, так как вам не хватает запятой ,
для разделения значений.Вы не вставляете строку, вы вставляете несуществующие ключевые слова, создавая ошибку синтаксического анализа SQL.Вот как интерпретируется SQL (обратите внимание на красную линию покачивания):
Строки в SQL должны быть заключены в одинарные кавычки '
как... VALUES ('value1', 'value2')
, выглядит так:
Кроме того, вам необходимо очистить ваш SQL с помощью параметров!(ответ на PHP) , с C#
это будет выглядеть так:
SqlCeCommand command = new SqlCeCommand("INSERT INTO NStacks(NStacksName, NStacksItem)VALUES(@NStacksName, @NStacksItem)", con);
command.Parameters.Add(new SqlCeParameter("NStacksName", textBox1.Text));
command.Parameters.Add(new SqlCeParameter("NStacksItem", File));
command.ExecuteNonQuery();
Или с классом соединения с БД:
using System;
using System.Data;
using System.Data.SqlServerCe;
namespace DataBase
{
public class DBConnection
{
private SqlCeConnection sqlConnection;
public DBConnection(string connectionString)
{
sqlConnection = new SqlCeConnection(connectionString);
}
private bool CloseConnection(SqlConnection sqlConnection)
{
try
{
sqlConnection.Close();
return true;
}
catch (SqlException e)
{
//Handle exception
return false;
}
}
private bool OpenConnection(SqlConnection sqlConnection)
{
try
{
sqlConnection.Open();
return true;
}
catch (SqlCeException e)
{
//Handle exception
return false;
}
}
public DataTable NonQuery(string sqlString, params SqlCeParameter[] sqlParameters)
{
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("Affected Rows", typeof(int)));
if (this.OpenConnection(this.sqlConnection))
{
try
{
SqlCeCommand sqlCommand = new SqlCeCommand(sqlString, this.sqlConnection);
sqlCommand.Parameters.AddRange(sqlParameters);
table.Rows.Add(sqlCommand.ExecuteNonQuery());
}
catch (SqlCeException e)
{
table.Rows.Add(0);
//Handle exception
}
finally
{
this.CloseConnection(this.sqlConnection);
}
}
return table;
}
public DataTable Query(string sqlString, params SqlCeParameter[] sqlParameters)
{
DataTable table = new DataTable();
if (this.OpenConnection(this.sqlConnection))
{
try
{
SqlCeCommand sqlCommand = new SqlCeCommand(sqlString, this.sqlConnection);
sqlCommand.Parameters.AddRange(sqlParameters);
SqlCeDataAdapter sqlDataAdapter = new SqlCeDataAdapter(sqlCommand);
sqlDataAdapter.Fill(table);
}
catch (SqlCeException e)
{
//Handle exception
}
finally
{
this.CloseConnection(this.sqlConnection);
}
}
return table;
}
}
}
И вызывать его следующим образом:
// Outside foreach loop (better make it a class field and initialize this
// inside the class constructor)
DBConnection db = new DBConnection(connectionString);
// Inside foreach loop
DataTable result = db.NonQuery("INSERT INTO NStacks(NStacksName, NStacksItem)VALUES(@NStacksName, @NStacksItem)",
new SqlCeParameter("NStacksName", textBox1.Text),
new SqlCeParameter("NStacksItem", File));