Итак, я пишу экспорт данных между SQL и Foxpro, я использую параметризованные строки, чтобы вытащить нужные данные, я также использую конкатенацию строк, чтобы получить запрошенную информацию на определенных записей, это, казалось, работало нормально, пока я не дошел до записи кода сортировки, где заявленная ошибка стала распространенной.Почему я получаю эту ошибку? Как обращаться с нулевыми значениями. Сообщение = Необходимо указать дополнительные параметры
В качестве краткого изложения. Установление соединения с обеими базами данных.
static void Main(string[] args)
{
using (var exportConnection = new SqlConnection(connectionString: "Data Source=Localhost;"
+ "Trusted_Connection=yes;"
+ @"connection timeout=30;"
+ @"database=001-CARL_V4"))
using (var importConnection = new OleDbConnection(connectionString: @"Provider=vfpoledb.1;"
+
@"data source=C:\Users\Joshua.cameron\Desktop\PCHomesImportTestBlank\PCHomesServer\DATABASE\pchomes.dbc")
)
Я настраиваю команду, чтобы выбрать из SQL:
using (SqlCommand exportCommand = new SqlCommand(@"select
[ID]
,[OwTitle]
,[OwForenames]
,[OwSurname]
,[OwNum]
,[OwAddress1]
,[OwAddress2]
,[OwAddress3]
,[OwAddress4]
,[OwPostcode]
,[OwPhHome]
,[OwPhWork]
,[OwPhFax]
,[OwPhMobile]
,[OwEMail]
,[OwBankName]
,[OwAccNo]
,[OwAccName]
,[OwSalutation]
,[OwNotes]
,[OwSort1]
,[OwSort2]
,[OwSort3]
из dbo.CARL_Owners», exportConnection))
И команда для вставки в VFP:
using (OleDbCommand importCommand = new OleDbCommand(@"INSERT INTO CLIENT
(CLCODE
,clcodedesc
,Title
,Fname
,Sname
,Address1
,Address3
,Address5
,Address4
,Address6
,Postcode
,Phoneh
,PhoneW
,Facsimileh
,Mobile
,Emailaddr
,Bankname
,Bankacno
,Bankacna
,Salute
,Notes
,BANKSORT
)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
importConnection))
Добавление в параметризованные значения в вышеуказанный оператор INSERT:
importCommand.Parameters.AddWithValue("clcode", "");
importCommand.Parameters.AddWithValue("clcodedesc", "");
importCommand.Parameters.AddWithValue("Title", "");
importCommand.Parameters.AddWithValue("Fname", "");
importCommand.Parameters.AddWithValue("Sname", "");
importCommand.Parameters.AddWithValue("Address1", "");
importCommand.Parameters.AddWithValue("Address3", "");
importCommand.Parameters.AddWithValue("Address5", "");
importCommand.Parameters.AddWithValue("Address4", "");
importCommand.Parameters.AddWithValue("Address6", "");
importCommand.Parameters.AddWithValue("Postcode", "");
importCommand.Parameters.AddWithValue("Phoneh", "");
importCommand.Parameters.AddWithValue("PhoneW", "");
importCommand.Parameters.AddWithValue("Facsimileh", "");
importCommand.Parameters.AddWithValue("Mobile", "");
importCommand.Parameters.AddWithValue("Emailaddr", "");
importCommand.Parameters.AddWithValue("Bankname", "");
importCommand.Parameters.AddWithValue("Bankacno", "");
importCommand.Parameters.AddWithValue("Bankacna", "");
importCommand.Parameters.AddWithValue("Salute", "");
importCommand.Parameters.AddWithValue("Notes", "");
importCommand.Parameters.AddWithValue("Banksort", "");
Откройте базу данных соединений:
exportConnection.Open();
importConnection.Open();
заселить выше строки со значениями тянули из SQL:
var exportReader = exportCommand.ExecuteReader();
while (exportReader.Read())
{
string part1 = exportReader.GetSqlValue(2).ToString();
string part2 = exportReader.GetSqlValue(3).ToString();
string space = " ";
string code = exportReader.GetSqlValue(0).ToString();
string clcode = exportReader.GetSqlValue(2).ToString();
string title = exportReader.GetSqlValue(1).ToString();
string sort1 = exportReader.GetSqlValue(20).ToString();
string sort2 = exportReader.GetSqlValue(21).ToString();
string sort3 = exportReader.GetSqlValue(22).ToString();
// ID
importCommand.Parameters["clcode"].Value = string.Concat(clcode,code);
//
importCommand.Parameters["clcodedesc"].Value = string.Concat(title,space,part1,space,part2);
//OwTitle
importCommand.Parameters["Title"].Value = exportReader.GetSqlValue(1).ToString();
//OwForenames
importCommand.Parameters["Fname"].Value = exportReader.GetSqlValue(2).ToString();
//OwSurname
importCommand.Parameters["Sname"].Value = exportReader.GetSqlValue(3).ToString();
//OwNum
importCommand.Parameters["Address1"].Value = exportReader.GetSqlValue(4).ToString();
//[OwAddress1]
//[OwAddress2]
//[OwAddress3]
//[OwAddress4]
importCommand.Parameters["Address3"].Value = exportReader.GetSqlValue(5).ToString();
importCommand.Parameters["Address5"].Value = exportReader.GetSqlValue(6).ToString();
importCommand.Parameters["Address4"].Value = exportReader.GetSqlValue(7).ToString();
importCommand.Parameters["Address6"].Value = exportReader.GetSqlValue(8).ToString();
//OwPostcode
importCommand.Parameters["Postcode"].Value = exportReader.GetSqlValue(9).ToString();
//OwPhHome
importCommand.Parameters["Phoneh"].Value = exportReader.GetSqlValue(10).ToString();
//OwPhWork
importCommand.Parameters["PhoneW"].Value = exportReader.GetSqlValue(11).ToString();
//OwPhFax
importCommand.Parameters["Facsimileh"].Value = exportReader.GetSqlValue(12).ToString();
//OwPhMobile
importCommand.Parameters["Mobile"].Value = exportReader.GetSqlValue(13).ToString();
//OwEMail
importCommand.Parameters["Emailaddr"].Value = exportReader.GetSqlValue(14).ToString();
//OwBankName
importCommand.Parameters["Bankname"].Value = exportReader.GetSqlValue(15).ToString();
//OwAccNo
importCommand.Parameters["Bankacno"].Value = exportReader.GetSqlValue(16).ToString();
//OwAccName
importCommand.Parameters["Bankacna"].Value = exportReader.GetSqlValue(17).ToString();
//OwSalutation
importCommand.Parameters["Salute"].Value = exportReader.GetSqlValue(18).ToString();
//OwNotes
importCommand.Parameters["Notes"].Value = exportReader.GetSqlValue(19).ToString();
//OwSort1
//OwSort2
//OwSort3
importCommand.Parameters["Banksort"].Value = string.Concat(sort1, sort2, sort3);
комментируемой линия соответствующих записей в базе данных SQL.
Наконец я выполнить запрос и закрыть подключение:
try
{
importCommand.ExecuteNonQuery();
}
catch (Exception e)
{
Console.Write("Error Writing to database");
Console.Write(e);
Console.ReadKey();
}
}
// done
Console.WriteLine("Complete!");
Console.ReadKey();
exportConnection.Close();
importConnection.Close();
Моя теория состоит в том, что эта строка значение:
importCommand.Parameters["Banksort"].Value = string.Concat(sort1, sort2, sort3);
вызывает проблемы, так как первые записи в таблице, являются «NULL "
Вы действительно не должны использовать 'AddWithValue', как это, просто используйте' Add ('и использовать перегрузку, которая принимает в' DbType' –
о прямо чем разница между этими двумя –
? Ну, 'AddWithValue (' берет лучшее предположение о том, какой тип данных параметра должен основываться на том, что вы передали в значение, 'Add (' вы можете точно сказать, какой тип данных должен быть, поэтому нет никаких шансов для ошибка от неправильной наилучшей догадки –