2010-02-21 99 views
5

嘿,所有我試圖做以下插入查詢錯誤:一個nvarchar數據類型爲SMALLDATETIME數據類型的轉換導致超出範圍的值

SqlDataSource userQuizDataSource = new SqlDataSource(); 
userQuizDataSource.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=quizApp;Integrated Security=True"; 
userQuizDataSource.InsertCommand = "INSERT INTO [UserQuiz] ([DateTimeComplete], [Score], [UserName]) VALUES (@DateTimeComplete, @Score, @UserName)"; 

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString()); 
userQuizDataSource.InsertParameters.Add("Score", score.ToString()); 
userQuizDataSource.InsertParameters.Add("UserName", User.Identity.Name); 

int rowsAffected = userQuizDataSource.Insert(); 

布提不斷收到以下錯誤:

The conversion of a nvarchar data type to a smalldatetime data type resulted in an out-of-range value. The statement has been terminated.

任何人都可以幫我嗎?

回答

3

你的聲明DateTime.Now.ToString()返回什麼?

您的SQL Server期待什麼語言和區域設置?

你有錯配嗎?也許你的.NET返回MM/dd/yyyy格式,而SQL Server預計dd/MM/yyyy(反之亦然)。

試試這個代碼在您的SQL Server:

DECLARE @test TABLE (smalldate SMALLDATETIME) 
INSERT INTO @test VALUES ('02/21/2010 22:00:32') -- 
SELECT * FROM @test 

有替換字符串,我與你從.NET的DateTime.Now.ToString()有什麼輸出 - 工作的呢? SQL Server是否會爲您提供更好的錯誤消息?

接下來,嘗試使用ISO-8601格式的日期(年月日) - 這適用於所有區域和語言設置在SQL Server - 做這項工作?

DECLARE @test TABLE (smalldate SMALLDATETIME) 
INSERT INTO @test VALUES ('20100221 22:00:32') -- 
SELECT * FROM @test 
+0

非常感謝...工程!我認爲問題更多的是,我的機器上的日期格式與服務器的日期格式不同! – c11ada 2010-02-21 22:06:59

+0

.net返回日期的格式爲 dd/MM/yyyy 當我檢查SQL服務器日期甲酸鹽是美國風格! – c11ada 2010-02-21 22:09:24

+2

從.net到sql的最安全可能的「日期時間」格式我以前使用的日期是「yyyy-MM-dd HH:mm:ss.fff」。 PK :-) – 2010-02-21 22:29:17

0

嘗試改變這一點:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString()); 

這樣:

userQuizDataSource.InsertParameters.Add("@startdate", SqlDbType.DateTime, DateTime.Now.ToString()); 
+0

即時得到2個新錯誤 1)'System.Web.UI.WebControls.ParameterCollection.Add(string,string)'的最佳重載方法匹配有一些無效參數 2)參數'2':無法轉換從'System.DateTime'到'字符串' – c11ada 2010-02-21 21:45:45

0

嘗試沒有轉換您的日期字符串:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now); 

編輯:試試這個,然後:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", TypeCode.DateTime, DateTime.Now.ToString()); 

還有另一種方法只是通過實際的對象,但我不記得..對不起。

+0

現在即時得到2個新錯誤1)'System.Web.UI.WebControls.ParameterCollection.Add(string,string)'的最佳重載方法匹配有一些無效參數2)Argument '2':無法從'System.DateTime'轉換爲'字符串' – c11ada 2010-02-21 21:46:30

+0

對不起,你是對的。實際上還有另一種方法來添加對象,即日期時間,但我不記得,目前還沒有VS打開。嘗試在實際的數據源,並尋找一種像AddParameterValue ..(字符串名稱,對象值)的方法.. – ziya 2010-02-21 22:07:26

1

我有同樣的問題添加datetime.now到我的SQL服務器列'日期'設置爲數據類型SmallDateTime。

要解決這是很簡單的

string currentdatetime= 
DateTime.Now.Year + "." + DateTime.Now.Month + "." + DateTime.Now.Day + 
       " " + DateTime.Now.Hour+(":")+DateTime.Now.Minute+(":")+DateTime.Now.Second 

這將返回日期爲格式的服務器將期待

0

在Windows 8中,如果你正面臨這個(許多嘗試!後)問題甚至在以下位置

Control Panel -> Region

改變Formats後,您還必須將這些設置傳送給用戶。在同一個窗口中,轉到標籤「管理」,點擊複製設置。

選擇相應的複選框並點擊OK

相關問題