将数据从一个表插入到数据库中的另一个表(不同的服务器)
本文关键字:数据 另一个 服务器 数据库 一个 插入 | 更新日期: 2023-09-27 17:50:33
我正在使用c#(newbee at it)从服务器中的一个数据库打开连接,并将其迁移到另一个服务器中的另一个数据库。这听起来很容易,但我得到这个奇怪的错误。有什么帮助吗?
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
SqlConnection thisConnection = new SqlConnection(@"SERVER=fisymsql02.i.ftvac;DATABASE=fcpdp_new;UID=;PWD=");
thisConnection.Open();
SqlCommand thisCommand = thisConnection.CreateCommand();
thisCommand.CommandText = "select [curfrom],[curto],[rateDate],[rate] from [fcpdp_new].[dbo].[latestxrates]";
SqlDataReader thisReader = thisCommand.ExecuteReader();
SqlConnection thisConnection1 = new SqlConnection(@"SERVER=SBKFISDDB1;DATABASE=UniversalTool;UID=;PWD=");
thisConnection1.Open();
SqlCommand thisCommand1 = thisConnection1.CreateCommand();
while (thisReader.Read())
{
Console.WriteLine("'t{0}'t{1}", thisReader["curfrom"], thisReader["rate"]);
thisCommand1.CommandText = " BEGIN TRY INSERT INTO [dbo].[CurrencyConversionSource]([ToCurrency] ,[FromCurrency] ,[DateTimeStamp] ,[FISClose]) VALUES ("+thisReader["curfrom"] +"," + thisReader["curto"]+","+thisReader["rateDate"]+"," + thisReader["rate"] +") END TRY BEGIN CATCH PRINT 'Error: Same set of primary key; row skipped' END CATCH)";
using(SqlCommand cmd = new SqlCommand(thisCommand1.CommandText, thisConnection1))
{
**thisCommand1.ExecuteNonQuery();**
Console.WriteLine("Row inserted !! ");
}
Console.ReadKey();
}
thisConnection.Close();
}
}
}
当我执行这个时,我得到以下错误:
"在此上下文中不允许使用名称"GBP"。有效的表达式包括常量、常量表达式和(在某些上下文中)变量。不允许使用列名
')'附近语法错误。"
GBP是第一行的有效数据,它不是列名之一。有什么想法吗?**中的代码是我得到错误的地方。
看起来您在这行末尾有一个不必要的)
;
thisCommand1.CommandText = @" BEGIN TRY INSERT INTO [dbo].[CurrencyConversionSource]([ToCurrency] ,[FromCurrency] ,[DateTimeStamp] ,[FISClose])
VALUES ('"+thisReader["curfrom"] +"','" + thisReader["curto"]+"','"+thisReader["rateDate"]+"','" + thisReader["rate"] +"')
END TRY BEGIN CATCH PRINT 'Error: Same set of primary key;
row skipped' END CATCH)";
^^^^ here
删除它。
你也应该使用单引号与你的VALUES
字符串。
除了@Soner的答案,您还需要用单引号将字符串值括起来,否则它将被识别为列名而不是字符串值,例如:
thisCommand1.CommandText =
"INSERT INTO [dbo].[CurrencyConversionSource]([ToCurrency]) VALUES ('"
+thisReader["curfrom"] +"')" ;
此外,使用更好的方法,参数化查询,而不是在查询字符串中连接值。简化示例:
thisCommand1.CommandText =
"INSERT INTO [dbo].[CurrencyConversionSource]([ToCurrency]) VALUES (@ToCurrency)" ;
using(SqlCommand cmd = new SqlCommand(thisCommand1.CommandText, thisConnection1))
{
cmd.Parameters.AddWithValue("@ToCurrency", thisReader["curfrom"]);
thisCommand1.ExecuteNonQuery();
Console.WriteLine("Row inserted !! ");
}