我一直在关注本教程如何做一个LINQ到SQL批处理插入。从字符串转换datetime时转换失败。 Linq To SQL&OpenXML
http://www.codeproject.com/KB/linq/BulkOperations_LinqToSQL.aspx
但是我有我的数据库中的日期时间字段,我不断收到此错误。
System.Data.SqlClient.SqlException是 未处理消息= “转化从 字符串变换日期时间时失败 ”。源= “净 SqlClient数据提供。”
错误码= -2146232060类= 16
LineNumber上= 7总数= 241
过程= “spTEST_InsertXMLTEST_TEST” 服务器= “” 状态= 1个堆栈跟踪: 在System.Data。 SqlClient.SqlConnection.OnError(SQLEXCEPTION 例外,布尔breakConnection) 在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand的cmdHandler, SqlDataReader的dataStream, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)
我不知道为什么,当我刚刚参加生成的XML文件中的日期时间,并手动将其复制到SQL Server 2005中它与它没有任何问题,并将其转换就好了。
这是我的SP
CREATE PROCEDURE [dbo].[spTEST_InsertXMLTEST_TEST](@UpdatedProdData nText)
AS
DECLARE @hDoc int
exec sp_xml_preparedocument @hDoc OUTPUT,@UpdatedProdData
INSERT INTO UserTable(CreateDate)
SELECT XMLProdTable.CreateDate
FROM OPENXML(@hDoc, 'ArrayOfUserTable/UserTable', 2)
WITH (
CreateDate datetime
) XMLProdTable
EXEC sp_xml_removedocument @hDoc
C#代码
using (TestDataContext db = new TestDataContext())
{
UserTable[] testRecords = new UserTable[1];
for (int count = 0; count < 1; count++)
{
UserTable testRecord = new UserTable()
{
CreateDate = DateTime.Now
};
testRecords[count] = testRecord;
}
StringBuilder sBuilder = new StringBuilder();
System.IO.StringWriter sWriter = new System.IO.StringWriter(sBuilder);
XmlSerializer serializer = new XmlSerializer(typeof(UserTable[]));
serializer.Serialize(sWriter, testRecords);
db.spTEST_InsertXMLTEST_TEST(sBuilder.ToString());
}
渲染XML文件
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfUserTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserTable>
<CreateDate>2010-05-19T19:35:54.9339251-07:00</CreateDate>
</UserTable>
</ArrayOfUserTable>
Intresting.Can请解释为什么这2种方式更好,为什么你不应该使用“nText”?你为什么还有[1]?在这种情况下,我只有一条记录,但这只是一个测试,我会有很多记录。我正在使用SQL Server 2005,我不确定我是否使用XQuery。 – chobo2 2010-05-20 17:43:31
我试图做你的第二个选项,但我不断收到。第3行 值函数需要2个参数。 – chobo2 2010-05-20 18:03:08
啊,我明白为什么我得到这个错误。这是因为我认为在做varchars时需要第三个参数的长度,但是你只需要像'varchar(50)' – chobo2 2010-05-20 18:13:32