簡體   English   中英

SQL Server中的錯誤241:從C#中的字符串轉換為日期時間

[英]Error 241 in SQL Server : converting to datetime from string in C#

我想將C#中的數據插入SQL Server。 所以我在SQL Server中創建了以下類型:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[InsertTaradod]
    @taradodType dbo.taradodType  READONLY
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO dbo.taradod 
        SELECT * 
        FROM @taradodType a
        WHERE NOT EXISTS (SELECT 1 
                          FROM dbo.taradod 
                          WHERE IDp = a.IDp 
                            AND (SELECT CAST(Date AS DATETIME)) = a.date)

在C#中,我定義了一個數據表:

 DataTable dtreadd = new DataTable();

 dtreadd.Columns.Add("IDp");
 dtreadd.Columns.Add("date");
 dtreadd.Columns.Add("day");
 dtreadd.Columns.Add("nobatkari");
 dtreadd.Columns.Add("code");

我使用以下代碼將數據插入dtreadd

dtreadd.Clear();

for (int i = 0; i < dtja.Rows.Count; i++)
{
    dtreadd.Rows.Add(dtja.Rows[i]["IDp"].ToString(),DateTime.Parse(dtja.Rows[i]["date"].ToString()), GetDayOfWeek(GetPerDate2(dtja.Rows[i]["date"].ToString())), "", dtja.Rows[i]["code"].ToString());
}

並且我使用此代碼按SQL Server中定義的類型插入數據:

SqlConnection sqlconn = new SqlConnection(DBsetting.Connstring);
sqlconn.Open();

using (sqlconn)
{
    try
    {
        SqlCommand cmd = new SqlCommand("InsertTaradod", sqlconn);
        cmd.CommandType = CommandType.StoredProcedure;

        SqlParameter dtparam = cmd.Parameters.AddWithValue("@taradodType", dtreadd);
        dtparam.SqlDbType = SqlDbType.Structured;

        cmd.ExecuteNonQuery();

        MessageBox.Show("Inserted");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

但是,當我運行此命令將數據插入SQL Server表時,出現錯誤:

從字符串轉換日期和/或時間時轉換失敗

表值參數@taradodType的數據與參數的表類型@taradodType SQL Server錯誤是:

消息241,狀態:1
該語句已終止

請幫我解決這個問題

假設用戶定義的表類型與其他問題相同(感謝BugFinder!)

CREATE TYPE [dbo].[taradodType] AS TABLE
(
    [IDP] [int] NULL,
    [date] [datetime] NULL,
    [day] [nvarchar](max) NULL,
    [nobatkari] [nvarchar](max) NULL,
    [code] [nvarchar](max) NULL
)

您的數據表應如下所示:

DataTable dtreadd = new DataTable();

dtreadd.Columns.Add("IDp", typeof(int));
dtreadd.Columns.Add("date", typeof(DateTime));
dtreadd.Columns.Add("day", typeof(string));
dtreadd.Columns.Add("nobatkari", typeof(string));
dtreadd.Columns.Add("code", typeof(string));

正如@ zohar-peled提到的“即使名稱匹配,也必須匹配列的順序”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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