插入选择问题c#

时间:2016-07-24 11:17:01

标签: c# sql-server

我有一个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

1 个答案:

答案 0 :(得分:1)

你的问题是你只是插入行,你的sql查询不返回任何行,它是一个简单的插入。

但是如果您在插入中使用了OUTPUT子句,则可以看到插入的行。

需要注意的另一件事是,SQL查询中的OUTPUT子句将返回一个表,因此您无法使用int resultValue变量来捕获结果,您将需要一个DataTable对象。

要做的事情:

  1. 修改SQL查询以添加OUTPUT子句。
  2. 创建DataTable对象。
  3. 使用insert返回的结果集填充DataTable对象。
  4. 最后从DataTable对象中读取并在控制台上显示。
  5. 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();
        }
    }