[英]'Conversion failed' error is not captured while executing in C# or in stored procedure
[英]Conversion failed in SQL procedure while executing from C#
我有一個SQL存儲過程,該過程使用openrowset命令並從Excel工作表中獲取值,並將其插入數據庫中。
我創建了一個C#應用程序,它將調用該過程並執行它。
問題!
當我從SQL Management Studio執行該過程時,沒有錯誤。 它發生得很完美。 但是,當我通過C#應用程序執行它時,出現一個錯誤:“從字符串轉換日期和/或時間時轉換失敗。”
碼
SQL查詢 (僅插入部分)
insert into tbl_item ([Item code],[Dt Created])
select[Item code] ,
case when [Dt Created] is null or [Dt Created]='' then null when ISDATE(CONVERT(nvarchar,CONVERT(datetime, [Dt Created],103))) =1 then CONVERT(datetime, [Dt Created],103) else null end as [Dt Created]
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0; Database=C:\Upload\Report.xlsx;HDR=YES;IMEX=1;',
'select * from [Sheet1$]')
C#代碼
public int updateItem()
{
SqlCommand cmd; cmd = new SqlCommand("usp_updateItem", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter returnParameter = cmd.Parameters.Add("RetVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
try
{
if (conn.State.Equals(ConnectionState.Closed))
conn.Open();
cmd.ExecuteNonQuery();
ret = Convert.ToInt32(returnParameter.Value);
}
catch (Exception e)
{
err = "Error: " + e.Message;
return -1;
}
finally
{
conn.Close();
}
return ret;
}
[Dt已創建]變量中的格式是什么。
在這種情況下,您擁有的convert語句將僅轉換以下類型
YYYY-MM-DD
YYYY-DD-MM
DD-MM-YYYY
您收到的錯誤是因為您的日期格式為“ MM-DD-YYYY”,例如“ 12-24-2015”。 因此,您收到轉換錯誤。
對不起,我想在這里阻止你。 您的問題現在已經解決,但是Karthik Venkatraman所說的正確。 您以某種方式獲得了解決方案,但出於學習目的,我建議進行更多調查。 這不屬於您所說的內容,但請確保這屬於日期格式。
**
一招
創建一個DateTimeVariable並對其進行初始化,然后根據數據庫中存在的記錄使用DateTimeParse類對其進行解析。
我相信您會得到解決的..謝謝:)
這就是我終於解決的方法...
SQL錯誤消息“轉換失敗”絕對是錯誤的指針。 它與眼前的問題沒有關系。 [如果我以前才知道這一點:(]
實際的問題是我在上面發布的主過程中調用了另一個過程。 此安裝程序在以我的憑據運行的SQL Management Studio中完美運行。 現在,在C#應用程序中,我創建了另一個SQL登錄用戶ID來運行它。 並且該用戶標識沒有執行權限來運行子過程。 具有諷刺意味的是,SQL給了我一個誤導性的轉換錯誤。 一旦獲得了正確的許可,它就可以完美運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.