Je suivais ce tutoriel sur la façon de faire un insert batch linq à sql.La conversion a échoué lors de la conversion de datetime à partir d'une chaîne de caractères. Linq To SQL & OpenXML
http://www.codeproject.com/KB/linq/BulkOperations_LinqToSQL.aspx
Toutefois, j'ai un champ datetime dans ma base de données et je continue à obtenir cette erreur.
System.Data.SqlClient.SqlException était unhandled Message = "Échec de la conversion lors de la conversion de datetime chaîne de caractères." Source = "Net SqlClient fournisseur de données."
ErrorCode = -2146232060 classe = 16
LineNumber = 7 Nombre = 241
Procédure = "spTEST_InsertXMLTEST_TEST" serveur = "" Etat = 1 StackTrace: à System.Data. SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection) à System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) à System.Data.SqlClient.TdsParser.Run (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
Je ne sais pas pourquoi quand je prends juste le datetime dans le fichier XML généré et copier manuellement dans SQL Server 2005, il n'a pas de problème avec elle et le convertit très bien.
Ceci est mon 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# Code
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 Rendus Doc
<?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.Pouvez-vous expliquer pourquoi ces 2 façons sont meilleures et pourquoi vous ne devriez pas utiliser "nText"? Aussi, pourquoi avez-vous [1]? Dans ce cas, je n'ai qu'un seul enregistrement, mais ce n'est qu'un test, je vais avoir beaucoup d'enregistrements.J'utilise SQL Server 2005 et je ne sais pas si j'utilise XQuery. – chobo2
J'ai essayé de faire votre 2ème option mais je continue d'obtenir. Ligne 3 La fonction de valeur nécessite 2 argument (s). – chobo2
Ah, je vois pourquoi je reçois cette erreur. C'est parce que je pensais que lorsque vous faites varchars vous avez besoin d'un 3ème paramètre pour la longueur mais à la place vous avez juste comme 'varchar (50)' – chobo2