【发布时间】:2012-10-09 16:38:02
【问题描述】:
我正在尝试执行以下插入命令。但它不起作用,也没有显示任何异常。谁能告诉我哪里做错了?
using System;
using System.Data;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Security.Principal;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void USP_tempSP()
{
DataTable objDataTable = new DataTable();
using (SqlConnection objConn = new SqlConnection("context connection=true"))
{
objConn.Open();
SqlCommand objCmd = new SqlCommand();
objCmd.CommandType = CommandType.Text;
objCmd.Connection = objConn;
objCmd.CommandText = "select * from temp";
/*table Structure
*CREATE TABLE [dbo].[temp]([empname] [varchar](20) NULL,[createdon] [datetime] NULL,[emp_id] [varchar](4) NULL
)
*/
SqlDataAdapter objDataAdapter = new SqlDataAdapter(objCmd.CommandText, objConn);
objDataAdapter.Fill(objDataTable);
SqlCommand objCmd1 = new SqlCommand();
objCmd1.CommandType = CommandType.Text;
objCmd1.UpdatedRowSource = UpdateRowSource.None;
objCmd.CommandText = "Insert into tempCopy " +
" values(@empname,@createdon)";
/*table Structure
*CREATE TABLE [dbo].[tempCopy]([empname] [varchar](20) NULL,[createdon] [datetime] NULL
)
*/
objCmd.Parameters.Add("@empname", SqlDbType.VarChar, 20, objDataTable.Columns["empname"].ColumnName);
objCmd.Parameters.Add("@createdon", SqlDbType.DateTime, 8, objDataTable.Columns["createdon"].ColumnName);
SqlDataAdapter adpt = new SqlDataAdapter();
adpt.InsertCommand = objCmd;
adpt.UpdateBatchSize = objDataTable.Rows.Count;
try
{
int recordsInserted = adpt.Update(objDataTable);
}
catch(Exception ex)
{
//
}
objConn.Close();
}
}
}
【问题讨论】:
-
你怎么知道它没有抛出异常?您明确地忽略了异常。定义“它不起作用”。你有什么迹象表明它不起作用。观察到的行为与预期行为有何具体差异?这种差异出现在代码的什么地方?发生这种情况时运行时值的状态是什么?
-
首先,取出
catch块中的注释,并写下/显示任何可能发生的异常,此时您刚刚吞下它。 -
所以.... 这是通过将
Insert传递给Update命令并传递一个未更改的表的表副本?还有人困惑吗? -
感谢您的即时关注。它不工作意味着程序没有在预期的表 tempCopy 中插入任何内容。我正在研究 CLR 存储过程。我只是想如何将一个表的内容复制到另一个表,它们都有不同的列结构。
-
@Sachin:调试时,插入的值是什么?您能否将 SQL Profiler 附加到数据库并查看针对它执行的实际查询?
标签: c#