C ado.net无法将值null插入列中

C++ ADO.NET Cannot insert the value NULL into column

本文关键字:null 插入列 ado net      更新时间:2023-10-16

我正在尝试在数据库中插入一些行,但是执行此代码时会出现错误:

#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'; 列不允许nulls。

有什么好主意?

您在Alerte上进行选择 * ...因此您不知道列的顺序...然后由于列索引分配值问题... fixee可能不是mydataset->表[" alerte"]

中的第二列