2014-09-29 54 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