2014-09-29 94 views
0

我試圖在登錄到管理面板時將insert插入到SQL Server表中進行審計。我想知道他們使用的是什麼設備。我將如何做到這一點?SQL Server:插入獲取用戶代理

這是我到目前爲止,它不起作用,它給了我一個錯誤,該語句已被終止。

string sUA = Request.UserAgent; 

using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString)) 
{ 
    using (SqlCommand sqlCmd1 = new SqlCommand { CommandText = "INSERT INTO dbo.audit ([user], [login], [pass], [timestamp], [device]) VALUES ('test', 'test', 'test', @time, @device)", Connection = sqlCon }) 
    { 
     sqlCmd1.Parameters.AddWithValue("@time", DateTime.Now); 
     sqlCmd1.Parameters.AddWithValue("@device", sUA); 

     sqlCon.Open(); 

     { 
      sqlCmd1.ExecuteNonQuery(); 

      sqlCon.Close(); 
     } 
    } 
} 
+1

您可以提供大小錯誤消息爲什麼語句終止? – Anton 2014-09-29 16:41:23

+0

System.Data.dll中發生類型爲「System.Data.SqlClient.SqlException」的異常,但未在用戶代碼中處理 附加信息:字符串或二進制數據將被截斷。 該聲明已被終止。 – 2014-09-29 16:42:01

+0

檢查你的列的長度 - 你試圖插入的列是**太長了**你試圖插入它的列!我的猜測是'[device]'列獲取用戶代理字符串 - 它在數據庫中定義了多長時間?用戶代理字符串要插入多長時間? – 2014-09-29 16:45:02

回答

1

類型「System.Data.SqlClient.SqlException」的一個例外出現在system.data.dll但在用戶代碼中的附加信息沒有被處理的:字符串或二進制數據將被截斷。該語句已終止。

這意味着您嘗試插入的數據對於一個或多個列來說太大。

你必須增加取其列太小(我懷疑這是你的設備列,但我們不能告訴,除非我們看到你的表結構,你的測試數據)

+0

這很奇怪,因爲我給了它100個字符。 nvarchar(100) – 2014-09-29 16:46:29

+0

@BillyBoel和什麼時間戳列?它是什麼類型的? – Anton 2014-09-29 16:47:22

+0

其實它工作我不得不給予nvchar(MAX)由於某些原因它不給我正確的用戶代理。它給了我這個Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,像Gecko)Chrome/37.0.2062.124 Safari/537.36 – 2014-09-29 16:48:20