我有一个C#程序,我想从中执行
Insert into table
Select * from table2
这是我的代码
using (SqlConnection conn = new SqlConnection(ConfigurationManager
.ConnectionStrings["SQLConnectionString2"].ConnectionString))
{
conn.Open();
string selectStmt = "INSERT INTO [TestDB].[dbo].[Test] (ID, Name, CreatedDate) " +
"SELECT TOP 10 [ID], [Name], [CreatedDate] FROM [TestDB].[dbo].[TempOrig]";
using (SqlCommand cmd2 = new SqlCommand(selectStmt, conn))
{
int resultValue = cmd2.ExecuteNonQuery();
Console.WriteLine(resultValue.ToString());
}
conn.Close();
}
我没有看到任何行插入[TestDB].[dbo].[Test]
,也没有错误。
我不确定发生了什么。
由于 MR
答案 0 :(得分:1)
你的问题是你只是插入行,你的sql查询不返回任何行,它是一个简单的插入。
但是如果您在插入中使用了OUTPUT
子句,则可以看到插入的行。
需要注意的另一件事是,SQL查询中的OUTPUT
子句将返回一个表,因此您无法使用int resultValue
变量来捕获结果,您将需要一个DataTable对象。
要做的事情:
OUTPUT
子句。string conString = "Server=ServerName;Database=DBName;User Id=UserName;Password =********; ";
string sqlcmd = " INSERT INTO [TestDB].[dbo].[Test] (ID, Name, CreatedDate) "
+ " OUTPUT inserted.ID, inserted.Name, inserted.CreatedDate "
+ " SELECT TOP 10 [ID], [Name], [CreatedDate] FROM [TestDB].[dbo].[TempOrig] ";
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlCommand cmd = new SqlCommand(sqlcmd, con))
{
con.Open();
// fill in the DataTable object
DataTable dt = new DataTable();
using (var insertedOutput = cmd.ExecuteReader())
{
dt.Load(insertedOutput);
}
// Read from DataTable object and print on the console
DataRow[] currentRows = dt.Select(null, null);
if (currentRows.Length < 1)
Console.WriteLine("No Current Rows Found");
else
{
foreach (DataColumn column in dt.Columns)
Console.Write("\t{0}", column.ColumnName);
Console.WriteLine("\t");
foreach (DataRow row in currentRows)
{
foreach (DataColumn column in dt.Columns)
Console.Write("\t{0}", row[column]);
Console.WriteLine("\t");
}
}
Console.ReadLine();
}
}