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(max)数据类型在数据库中存储对象(状态变量) 如何转换状态变量(对象)到字符串以存储在数据库中
答案 0 :(得分:0)
问题是您必须传递字符串而不是字典。我可能会建议您序列化您的字典并将该值传递给AddWithValue
函数。让JSON成为序列化的格式。我建议Json.net作为序列化库。它提供了方便的字典serialization / deserialization方式。
所以你的代码可能如下所示:
cmd.Parameters.AddWithValue("@states", JsonConvert.SerializeObject(state));
P.S。更好地使用using
和SqlConnection
对象的SqlCommand
语句。
答案 1 :(得分:0)
如果要存储任何对象,请在sqlserver中使用VARBINARY(MAX)
sqlCmd.Parameters.Add("@states", SqlDbType.VarBinary, Int32.MaxValue);
sqlCmd.Parameters["@states"].Value = state;
此处state
将是您的对象