对象类型c#不存在映射

时间:2017-02-27 06:18:13

标签: c# json webmethod

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)数据类型在数据库中存储对象(状态变量) 如何转换状态变量(对象)到字符串以存储在数据库中

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

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

所以你的代码可能如下所示:

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

P.S。更好地使用usingSqlConnection对象的SqlCommand语句。

答案 1 :(得分:0)

如果要存储任何对象,请在sqlserver中使用VARBINARY(MAX)

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

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

此处state将是您的对象