2017-02-27 146 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Services; 
using System.Data; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.IO; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    [WebMethod] 
    public static string SaveLayout(string layout, object state) 
    { 



     SqlConnection conn = new SqlConnection(@"Persist Security Info=False;User ID=admin;Password=admin123;Initial Catalog=Test_Layout;Data Source=Myserver"); 
     conn.Open(); 
     SqlCommand cmd = new SqlCommand("insertlayout", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@layout", layout); 
     cmd.Parameters.AddWithValue("@states", state); 

     cmd.ExecuteNonQuery(); 
     conn.Close(); 
     return "successfully state saved"; 
    } 
} 

我使用的WebMethod(使用JSON,jQuery的)存储对象在SQL Server 2008 但我得到的SQL Server 2008上下面的错误我使用为varchar(最大值存在)数据类型,用于存储对象(状态变量)在数据库如何状态变量(对象)转换为字符串在数据库没有映射从对象类型C#

enter image description here

存储3210

enter image description here

回答

0

问题是你必须传递一个字符串而不是字典。我可能会建议你将你的字典串行化并将该值传递给AddWithValue函数。让JSON成为序列化的格式。我会推荐Json.net作为序列化库。它提供了便捷的字典方式serialization/deserialization

所以,你的代码可能是这样的:

cmd.Parameters.AddWithValue("@states", JsonConvert.SerializeObject(state)); 

附:对于SqlConnectionSqlCommand对象,更好地使用using声明。

0

如果你想存储的任何对象使用VARBINARY(MAX)在SQLSERVER像

sqlCmd.Parameters.Add("@states", SqlDbType.VarBinary, Int32.MaxValue); 

sqlCmd.Parameters["@states"].Value = state; 

这里state将是你的对象

相关问题