我正在開發C#VS 2008/SQL Server 2005 Express網站應用程序。我已經嘗試了一些這個問題的修復,但我的調用堆棧不同於其他。而這些修復並沒有解決我的問題。我可以採取哪些措施來解決此問題?從字符串轉換datetime時轉換失敗
這是我的錯誤:
System.Data.SqlClient.SqlException was caught
Message="Conversion failed when converting datetime from character string."
Source=".Net SqlClient Data Provider"
ErrorCode=-2146232060
LineNumber=10
Number=241
Procedure="AppendDataCT"
Server="\\\\.\\pipe\\772EF469-84F1-43\\tsql\\query"
State=1
StackTrace:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at ADONET_namespace.ADONET_methods.AppendDataCT(DataTable dt, Dictionary`2 dic) in c:\Documents and Settings\Admin\My Documents\Visual Studio 2008\WebSites\Jerry\App_Code\ADONET methods.cs:line 102
這裏是相關的代碼。當我調試這段代碼時,「dic」只會遍歷3列名稱,但不會查看存儲在數據表「dt」中的行值。
public static string AppendDataCT(DataTable dt, Dictionary<string, string> dic)
{
if (dic.Count != 3)
throw new ArgumentOutOfRangeException("dic can only have 3 parameters");
string connString = ConfigurationManager.ConnectionStrings["AW3_string"].ConnectionString;
string errorMsg;
try
{
using (SqlConnection conn2 = new SqlConnection(connString))
{
using (SqlCommand cmd = conn2.CreateCommand())
{
cmd.CommandText = "dbo.AppendDataCT";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn2;
foreach (string s in dic.Keys)
{
SqlParameter p = cmd.Parameters.AddWithValue(s, dic[s]);
p.SqlDbType = SqlDbType.VarChar;
}
conn2.Open();
cmd.ExecuteNonQuery();
conn2.Close();
errorMsg = "The Person.ContactType table was successfully updated!";
}
}
}
這裏是我的SQL存儲過程:
ALTER PROCEDURE [dbo].[AppendDataCT]
@col1 VARCHAR(50),
@col2 VARCHAR(50),
@col3 VARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TEMP DATETIME
SET @TEMP = (SELECT CONVERT (DATETIME, @col3))
INSERT INTO Person.ContactType (Name, ModifiedDate)
VALUES(@col2, @TEMP)
END
輸入文件有3列。前兩個是varchars,但第三個也是我認爲的varchar,但它表示爲「3/11/2010」。在此輸入文件中,樣本行如下所示: 「Benjamin | breakfast | 3/11/2010」。 而我試圖將這個日期字段從一個字符串轉換爲我的SP中的日期時間。我是否以錯誤的方式去做?
的DataRow: COL1 | COL2 | COL3 11 | A2 | 1978年1月10日 12 | B2 | 1978年2月10日 13 | C2 | 1978年3月10日 14 | D2 | 4/10/1978
您的代碼混淆了我。爲什麼你要傳遞一個固定數量項目的字典,然後在期待datetime類型時使用'VarChar'參數類型? – 2010-06-09 17:40:57
您在Dctionary dic中持有哪些類型的數據以及DataTable中有哪些數據?我有一個假設和一個答案,但需要確認。 – TheGeekYouNeed 2010-06-09 17:54:26
字典詞典包含3列標題; DataTable包含來自輸入文件的行值。 喬恩,我想讀取日期字段作爲varchar。 查看最新的代碼和評論。 – salvationishere 2010-06-09 22:04:23