Исключение, вызывающее «WriteToServer» с аргументом «1» - PullRequest
0 голосов
/ 02 мая 2018

У меня есть сценарий powershell для вставки значений из XML-файла в базу данных sql.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу вставить значения в базу данных sql, поскольку ошибка указывает, что строковое значение в источнике данных не преобразуется в тип uniqueidentifier в целевых столбцах (которые в основном являются Столбцы ScheduleId и AccountingPeriodCase_PK_ID в базе данных sql).

Я пытался изменить тип данных [guid] для columns.add () на [uniqueidentifier] и все, но они дали мне ошибки.

Сценарий:

$dataSource = $env:COMPUTERNAME;                                       
$database = "DataModel.PAModel" 

$connection = New-Object System.Data.SqlClient.SqlConnection;  #setting connection
$connection.ConnectionString = "Server=$dataSource;Database=$database;Integrated Security=True;";
$connection.Open();

$command = New-Object System.Data.SqlClient.SqlCommand;
$command.Connection = $connection;

$as = New-Object System.Data.SqlClient.SqlDataAdapter;
$as.SelectCommand = $command;
$filename = "C:\XML\apc.xml";            #file to be loaded into sql server database table

$ds = New-Object System.Data.DataSet;
$ds.ReadXml($filename);    #reading from the file -- line gives output InferSchema

$dt = New-Object System.Data.DataTable;

$dt.Columns.Add("StartTime",[datetime]);
$dt.Columns.Add("EndTime",[datetime]);
$dt.Columns.Add("Status",[int]);
$dt.Columns.Add("ProcessedTime",[datetime]);
$dt.Columns.Add("ScheduleId",[guid]);
$dt.Columns.Add("Model",[string]);
$dt.Columns.Add("ModelVersion",[string]);
$dt.Columns.Add("ModelVersionState",[string]);
$dt.Columns.Add("ModifiedTime",[datetime]);
$dt.Columns.Add("WriteBackLastRunTime",[datetime]);
$dt.Columns.Add("ModifiedBy",[string]);
$dt.Columns.Add("ModelType",[int]);
$dt.Columns.Add("IsTimeRange",[int]);
$dt.Columns.Add("WriteBackStatus",[int]);
$dt.Columns.Add("RetryWriteBack",[int]);
$dt.Columns.Add("NumOfRetry",[int]);
$dt.Columns.Add("FrequencyUnits",[int]);
$dt.Columns.Add("ScheduleType",[int]);
$dt.Columns.Add("CustomType",[int]);
#$dt.Columns.Add("ShiftStartTime",[datetime]);
#$dt.Columns.Add("StartWeekDay",[int]);
#$dt.Columns.Add("EndWeekDay",[int]);
$dt.Columns.Add("WritebackProcessedTime",[datetime]);
$dt.Columns.Add("DiagStatus",[int]);

$dc = New-Object System.Data.DataColumn;
$dc = $dt.Columns.Add("AccountingPeriodCase_PK_ID",[guid]);

$dc.AllowDBNull.Equals($false);
$dc.Unique.Equals($true);

$dt=$ds.Tables[0];

$bcp = New-Object "Data.SqlClient.SqlBulkCopy" $connection; #bulkcopy to the destination table.
$bcp.DestinationTableName = "dbo.AccountingPeriodCases";

#$bcp.ColumnMappings.Count;
$bcp.ColumnMappings.Clear();

$bcp.ColumnMappings.Add("StartTime","StartTime");
$bcp.ColumnMappings.Add("EndTime","EndTime");
$bcp.ColumnMappings.Add("Status","Status");
$bcp.ColumnMappings.Add("ProcessedTime","ProcessedTime");
$bcp.ColumnMappings.Add("ScheduleId","ScheduleId");
$bcp.ColumnMappings.Add("Model","Model");
$bcp.ColumnMappings.Add("ModelVersion","ModelVersion");
$bcp.ColumnMappings.Add("ModelVersionState","ModelVersionState");
$bcp.ColumnMappings.Add("ModifiedTime","ModifiedTime");
$bcp.ColumnMappings.Add("WriteBackLastRunTime","WriteBackLastRunTime");
$bcp.ColumnMappings.Add("ModifiedBy","ModifiedBy");
$bcp.ColumnMappings.Add("ModelType","ModelType");
$bcp.ColumnMappings.Add("IsTimeRange","IsTimeRange");
$bcp.ColumnMappings.Add("WriteBackStatus","WriteBackStatus");
$bcp.ColumnMappings.Add("RetryWriteBack","RetryWriteBack");
$bcp.ColumnMappings.Add("NumOfRetry","NumOfRetry");
$bcp.ColumnMappings.Add("FrequencyUnits","FrequencyUnits");
$bcp.ColumnMappings.Add("ScheduleType","ScheduleType");
$bcp.ColumnMappings.Add("CustomType","CustomType");
#$bcp.ColumnMappings.Add("ShiftStartTime","ShiftStartTime");
#$bcp.ColumnMappings.Add("StartWeekDay","StartWeekDay");
#$bcp.ColumnMappings.Add("EndWeekDay","EndWeekDay");
$bcp.ColumnMappings.Add("WritebackProcessedTime","WritebackProcessedTime");
$bcp.ColumnMappings.Add("DiagStatus","DiagStatus");
$bcp.ColumnMappings.Add("AccountingPeriodCase_PK_ID","AccountingPeriodCase_PK_ID");

#$bcp.ColumnMappings.Count;


if ($connection.State -ne [Data.ConnectionState]::Open) {

    "Connection to DB is not open.";

    Exit;

}

$bcp.WriteToServer($dt);        #writing to server 
$bcp.ColumnMappings.Clear();
$connection.Close();

Ошибка:

Exception calling "WriteToServer" with "1" argument(s): "The given value of type String from the  data source cannot be converted to type uniqueidentifier of the specified target column." At C:\Documents\DCT\SavedScripts\XMLtoDB\AccountingPeriodCases\xAccountingPeriodCases .ps1:96 char:1
+ $bcp.WriteToServer($dt);        #writing to server
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : InvalidOperationException

Таблица базы данных sql имеет следующие столбцы: enter image description here

Не могли бы вы помочь мне устранить ошибку?

Значения ScheduleId и AccountingPeriodCases_PK_ID:

enter image description here

...