Есть такая таблица:
CREATE TABLE [dbo].[DataAdditional] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Alpha] INT NULL,
[Bravo] BIGINT NULL,
[Charlie] BIGINT NULL,
[Delta] INT NULL,
[Echo] INT NULL,
[Foxtrot] INT NULL,
[Golf] INT NULL,
[Hotel] NVARCHAR (MAX) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
И такая процедура:
CREATE PROCEDURE [dbo].[AddAdditionalData]
@alpha int = 0,
@bravo bigint = 0,
@Charlie bigint = 0,
@Delta int = 0,
@Echo int = 0,
@Foxtrot int = 0,
@Golf int = 0,
@Hotel nvarchar(max) = N''
AS
BEGIN
INSERT INTO dbo.DataAdditional(Alpha, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel)
--VALUES (@alpha, @bravo, @Charlie, @Delta, @Echo, @Foxtrot, @Golf, @Hotel) --Не работает --
VALUES (23651, 12587156333, 99999, 2321, 2, 21, 4, N'Значимость этих проблем настолько очевидна, что сложившаяся структура организации создаёт...
')
END
--exec dbo.AddAdditionalData 23651, 12587156333, 99999, 2321, 2, 21, 4, N'Значимость этих проблем настолько очевидна, что сложившаяся структура организации создаёт... ' --
--вот этот exec работает
exec dbo.AddAdditionalData
-- а этот работает если раскоменчин второй VALUES, а первый закоменчен.
Так вызываю процедуру из C#:
public void AddSecondData(MainWindow.DataSecond dataSecond)
{
//ClearData();
using (SqlConnection con = new SqlConnection(ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("dbo.AddAdditionalData", con))//без dbo тоже пробовал
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@alpha", SqlDbType.Int).Value = dataSecond.Alpha;
cmd.Parameters.Add("@bravo", SqlDbType.BigInt).Value = Convert.ToInt64(dataSecond.Bravo);
cmd.Parameters.Add("@Charlie", SqlDbType.BigInt).Value = Convert.ToInt64(dataSecond.Charlie);
cmd.Parameters.Add("@Delta", SqlDbType.Int).Value = dataSecond.Delta;
cmd.Parameters.Add("@Echo", SqlDbType.Int).Value = dataSecond.Echo;
cmd.Parameters.Add("@Foxtrot", SqlDbType.Int).Value = dataSecond.Foxtrot;
cmd.Parameters.Add("@Golf", SqlDbType.Int).Value = dataSecond.Golf;
cmd.Parameters.Add("@Hotel", SqlDbType.NVarChar).Value = dataSecond.Hotel;
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
cmd.ExecuteNonQuery();
// пробовал завернуть в try catch, но никаких exception не получил.
}
}
}
Вряд-ли проблема в этом, но DataSecond выглядит такpublic class DataSecond
{
public int Alpha;
public long Bravo;
public long Charlie;
public int Delta;
public int Echo;
public int Foxtrot;
public int Golf;
public string Hotel;
}
БД создавал через контекстное меню в VS. Подключение есть, перед выполнением процедуры проверяю.
Почему так? Даже никаких ошибок при выполнения метода нет. Просто таблица не заполняется. Даже default значения не ставятся. Хотя процедура из C# точно вызывается.
UPD:
Скорее всего проблема в самом C#. Так как после вызова процедуры через него, и обновления таблицы (чтобы данные посмотреть) получаю:
This database cannot be imported. It is either an unsupported SQL server version or an unsupported database compatibility.
Погуглил, вроде так решается:public void AddSecondData(MainWindow.DataSecond dataSecond)
{
SqlConnection connection = GetConnection();
using (SqlCommand cmd = new SqlCommand("dbo.AddAdditionalData", con))
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@alpha", SqlDbType.Int).Value = dataSecond.Alpha;
cmd.Parameters.Add("@bravo", SqlDbType.BigInt).Value = Convert.ToInt64(dataSecond.Bravo);
cmd.Parameters.Add("@Charlie", SqlDbType.BigInt).Value = Convert.ToInt64(dataSecond.Charlie);
cmd.Parameters.Add("@Delta", SqlDbType.Int).Value = dataSecond.Delta;
cmd.Parameters.Add("@Echo", SqlDbType.Int).Value = dataSecond.Echo;
cmd.Parameters.Add("@Foxtrot", SqlDbType.Int).Value = dataSecond.Foxtrot;
cmd.Parameters.Add("@Golf", SqlDbType.Int).Value = dataSecond.Golf;
cmd.Parameters.Add("@Hotel", SqlDbType.NVarChar).Value = dataSecond.Hotel;
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
cmd.ExecuteNonQuery();
// пробовал завернуть в try catch, но никаких exception не получил.
}
}
private SqlConnection GetConnection()
{
SqlConnectionStringBuilder connectionString = new SqlConnectionStringBuilder();
connectionString.DataSource = "(localdb)\\MSSQLLocalDB";
connectionString.AttachDBFilename = "|DataDirectory|\\MainDB.mdf";
connectionString.IntegratedSecurity = true;
string connectString = connectionString.ConnectionString;
SqlConnection connection = new SqlConnection(connectString);
return connection;
//return @"data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MainDB.mdf;MultipleActiveResultSets=True;";
//return @"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=MainDB;"
// + "Integrated Security=true;";
}
но это не помогло.
UPD 2:
Проблема 100% в C#. Создал процедуру которая удаляет все из таблицы, вручную добавил данные в таблицу и так же вызываю из C# новую процедуру. Ничего не удалилось и ошибок никаких нет(try catch тоже ничего не показывает).