簡體   English   中英

從C#執行時,SQL過程中的轉換失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM