SQL Server 2008 — C ++ ADO.NET Не удается вставить значение NULL в столбец

Я пытаюсь вставить несколько строк в базу данных, но я получил ошибку при выполнении этого кода:

#using <mscorlib.dll>
#using <System.dll>
#using <system.data.dll>
#using <System.Xml.dll>

#include <sstream>
#include <time.h>
#include <string>
#include <iostream>
#include <tchar.h>

using namespace System;
using namespace System::Data;
using namespace System::Xml;
using namespace System::Data::SqlClient;

// This is the entry point for this application
int _tmain(void)
{
SqlConnection      ^ mySQLConnection;
SqlDataAdapter     ^ myDataAdapter;
DataSet            ^ myDataSet;
DataRow            ^ myRow;
SqlParameter       ^ myParameter;

try
{
mySQLConnection = gcnew SqlConnection("Data Source=NECTARYS-PC;Initial Catalog=MonitoringN;Integrated Security=True;");
myDataAdapter = gcnew SqlDataAdapter();
myDataSet = gcnew DataSet();

// Open up the connection
mySQLConnection->Open();

myDataAdapter->SelectCommand = gcnew SqlCommand("select motif,dateAlerte,fixee,nomPoste," +
"nomApplication,nomFichier,FichierModel_id from Alerte", mySQLConnection);

myDataAdapter->InsertCommand = gcnew SqlCommand("insert into Alerte (motif,dateAlerte," +
"fixee,nomPoste,nomApplication,nomFichier,FichierModel_id) values (@motif,@dateAlerte," +
"@fixee,@nomPoste,@nomApplication,@nomFichier,@FichierModel_id)", mySQLConnection);

myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@motif", SqlDbType::VarChar));
myParameter->SourceColumn = "motif";
myParameter->SourceVersion = DataRowVersion::Current;

myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@dateAlerte", SqlDbType::VarChar));
myParameter->SourceColumn = "dateAlerte";
myParameter->SourceVersion = DataRowVersion::Current;

myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@fixee", SqlDbType::Bit));
myParameter->SourceColumn = "fixee";
myParameter->SourceVersion = DataRowVersion::Current;

myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@nomPoste", SqlDbType::VarChar));
myParameter->SourceColumn = "nomPoste";
myParameter->SourceVersion = DataRowVersion::Current;

myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@nomApplication", SqlDbType::VarChar));
myParameter->SourceColumn = "nomApplication";
myParameter->SourceVersion = DataRowVersion::Current;

myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@nomFichier", SqlDbType::VarChar));
myParameter->SourceColumn = "nomFichier";
myParameter->SourceVersion = DataRowVersion::Current;

myParameter = myDataAdapter->InsertCommand->Parameters->Add(
gcnew SqlParameter("@FichierModel_id", SqlDbType::Int));
myParameter->SourceColumn = "FichierModel_id";
myParameter->SourceVersion = DataRowVersion::Current;

time_t now = time(0);
tm ltm;
localtime_s(&ltm,&now);
std::stringstream dateAjoutSysteme;
dateAjoutSysteme << ltm.tm_mday
<< "/"<< 1 + ltm.tm_mon
<< "/"<< 1900 + ltm.tm_year
<< " "<< 1 + ltm.tm_hour
<< ":"<< 1 + ltm.tm_min
<< ":"<< 1 + ltm.tm_sec;
String^ str = gcnew System::String(dateAjoutSysteme.str().c_str());

Boolean fixee = true;

myDataAdapter->Fill(myDataSet, "Alerte");
myRow = myDataSet->Tables["Alerte"]->NewRow();
myRow->ItemArray[0] = "A";
myRow->ItemArray[1] = str;
myRow->ItemArray[2] = fixee;
myRow->ItemArray[3] = "B";
myRow->ItemArray[4] = "C";
myRow->ItemArray[5] = "D";
myRow->ItemArray[6] = 0UL;
myDataSet->Tables["Alerte"]->Rows->Add(myRow);

//we use insertcommand property for the update.
myDataAdapter->Update(myDataSet, "Alerte");
}
catch (Exception ^ e) {
Console::Write(e->ToString());
}
__finally {
mySQLConnection->Close();
system("PAUSE");
}
return 0;
}

ошибка :

System.Data.SqlClient.SqlException (0x80131904): невозможно вставить
значение NULL в столбце «fixee», таблица «MonitoringN.dbo.Alerte»;
столбец не допускает нулевые значения.

Любая блестящая идея, пожалуйста?

0

Решение

Вы делаете выбор * в Alerte … так что вы не знаете порядок столбцов … затем вы назначаете значения из-за индекса столбца … Я думаю, что есть проблема … Fixee, вероятно, не 2-й столбец в myDataSet-> Tables [«Alerte»]

0

Другие решения

Других решений пока нет …