没有映射从对象类型C#
问题描述:
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#
存储3210
答
问题是你必须传递一个字符串而不是字典。我可能会建议你将你的字典串行化并将该值传递给AddWithValue
函数。让JSON成为序列化的格式。我会推荐Json.net作为序列化库。它提供了便捷的字典方式serialization/deserialization。
所以,你的代码可能是这样的:
cmd.Parameters.AddWithValue("@states", JsonConvert.SerializeObject(state));
附:对于SqlConnection
和SqlCommand
对象,更好地使用using
声明。
答
如果你想存储的任何对象使用VARBINARY(MAX)
在SQLSERVER像
sqlCmd.Parameters.Add("@states", SqlDbType.VarBinary, Int32.MaxValue);
sqlCmd.Parameters["@states"].Value = state;
这里state
将是你的对象