![](/img/trans.png)
[英]Send C# datetime to SQL Server - error “Conversion failed when converting date and/or time from character string”
[英]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.