Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图使用json数组在带有c#的sql中插入数据,但仍然得到Newtonsoft.json.Linq.JValue错误?_C#_Sql_Json_Asp.net Mvc - Fatal编程技术网

试图使用json数组在带有c#的sql中插入数据,但仍然得到Newtonsoft.json.Linq.JValue错误?

试图使用json数组在带有c#的sql中插入数据,但仍然得到Newtonsoft.json.Linq.JValue错误?,c#,sql,json,asp.net-mvc,C#,Sql,Json,Asp.net Mvc,我将JSON数据数组从客户端传递到服务器端(c#)。但是,当我尝试将此数据插入到SQL表中时,就在查询执行的那一刻,我得到了这个Newtonsoft.Json.Linq.JValue 以下是我目前掌握的代码: 客户(js) 服务器端(C#): 你知道会出什么问题吗?因为你使用的是非通用版本的,JSON.Net会将所有东西反序列化到它自己的对象中,比如JObject和JValue。而且,由于您通过使用dynamic隐藏了所有这些,因此您很容易受到各种运行时错误的影响 然而,如果您使用具体的类,您将

我将JSON数据数组从客户端传递到服务器端(c#)。但是,当我尝试将此数据插入到SQL表中时,就在查询执行的那一刻,我得到了这个
Newtonsoft.Json.Linq.JValue

以下是我目前掌握的代码:

客户(js)

服务器端(C#):


你知道会出什么问题吗?

因为你使用的是非通用版本的,JSON.Net会将所有东西反序列化到它自己的对象中,比如
JObject
JValue
。而且,由于您通过使用
dynamic
隐藏了所有这些,因此您很容易受到各种运行时错误的影响

然而,如果您使用具体的类,您将获得类型安全代码。例如:

public class MyThing
{
    public string idCotizacion { get; set; }
    public string idProyecto { get; set; }
    public string nombreProyecto { get; set; }
    public string idProducto { get; set; }
}
现在使用以下命令:

var cotizaciones=JsonConvert.DeserializeObject(json);
您的代码的其余部分应该适合,但现在更加清晰和安全


另外,您不应该使用。

因为您使用的是的非通用版本,JSON.Net会将所有内容反序列化到它自己的对象,如
JObject
JValue
。而且,由于您通过使用
dynamic
隐藏了所有这些,因此您很容易受到各种运行时错误的影响

然而,如果您使用具体的类,您将获得类型安全代码。例如:

public class MyThing
{
    public string idCotizacion { get; set; }
    public string idProyecto { get; set; }
    public string nombreProyecto { get; set; }
    public string idProducto { get; set; }
}
现在使用以下命令:

var cotizaciones=JsonConvert.DeserializeObject(json);
您的代码的其余部分应该适合,但现在更加清晰和安全


另外,您不应该使用。

根据您发布的代码,我将实现一个Cotizacion类:

public class Cotizacion {
   public string idCotizacion {get; set;}
   public string idProyecto {get; set;}
   public string nombreProyecto {get; set;}
   public string idProducto{get; set;}
}
然后做一些类似的事情:

public string GuardarCotizacion(string json)
        {

            string SP_INSERTA_COTIZACIONPI = "SVI_CPI_COTIZACION_PI";
            var cotizaciones = JsonConvert.DeserializeObject<List<Cotizacion>>(json);

            foreach (var cotizacion in cotizaciones)
            {
                using (SqlConnection conexion = new SqlConnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings["ambiente"].ToString())))
                {
                    conexion.Open();
                    using (SqlCommand comm = new SqlCommand(SP_INSERTA_COTIZACIONPI, conexion))
                    {
                        comm.CommandType = System.Data.CommandType.StoredProcedure;
                        comm.Parameters.AddWithValue("IDCOTIZACION", cotizacion.idCotizacion);
                        comm.Parameters.AddWithValue("IDPROYECTO", cotizacion.idProyecto);
                        comm.Parameters.AddWithValue("NOMBRE_PROYECTO", cotizacion.nombreProyecto);
                        comm.Parameters.AddWithValue("IDPRODUCTO", cotizacion.idProducto);
                        comm.ExecuteNonQuery(); //Here is where the error appears
                    }
                }
            }
            return json;
        }
公共字符串GuardarCotizacion(字符串json)
{
字符串SP_INSERTA_COTIZACIONPI=“SVI_CPI_COTIZACION_PI”;
var cotizaciones=JsonConvert.DeserializeObject(json);
foreach(协作中的var协作)
{
使用(SqlConnection conexion=newsqlconnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings[“ambiente”].ToString()))
{
conexion.Open();
使用(SqlCommand=newsqlcommand(SP_INSERTA_COTIZACIONPI,conexion))
{
comm.CommandType=System.Data.CommandType.StoredProcess;
comm.Parameters.AddWithValue(“IDCOTIZACION”,cotizacion.IDCOTIZACION);
comm.Parameters.AddWithValue(“IDPROYECTO”,cotizacion.IDPROYECTO);
comm.Parameters.AddWithValue(“NOMBRE_PROYECTO”,cotizacion.nombreProyecto);
comm.Parameters.AddWithValue(“IDPRODUCTO”,协同IDPRODUCTO);
comm.ExecuteNonQuery();//此处显示错误
}
}
}
返回json;
}

根据您发布的代码,我将实现一个Cotizacion类:

public class Cotizacion {
   public string idCotizacion {get; set;}
   public string idProyecto {get; set;}
   public string nombreProyecto {get; set;}
   public string idProducto{get; set;}
}
然后做一些类似的事情:

public string GuardarCotizacion(string json)
        {

            string SP_INSERTA_COTIZACIONPI = "SVI_CPI_COTIZACION_PI";
            var cotizaciones = JsonConvert.DeserializeObject<List<Cotizacion>>(json);

            foreach (var cotizacion in cotizaciones)
            {
                using (SqlConnection conexion = new SqlConnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings["ambiente"].ToString())))
                {
                    conexion.Open();
                    using (SqlCommand comm = new SqlCommand(SP_INSERTA_COTIZACIONPI, conexion))
                    {
                        comm.CommandType = System.Data.CommandType.StoredProcedure;
                        comm.Parameters.AddWithValue("IDCOTIZACION", cotizacion.idCotizacion);
                        comm.Parameters.AddWithValue("IDPROYECTO", cotizacion.idProyecto);
                        comm.Parameters.AddWithValue("NOMBRE_PROYECTO", cotizacion.nombreProyecto);
                        comm.Parameters.AddWithValue("IDPRODUCTO", cotizacion.idProducto);
                        comm.ExecuteNonQuery(); //Here is where the error appears
                    }
                }
            }
            return json;
        }
公共字符串GuardarCotizacion(字符串json)
{
字符串SP_INSERTA_COTIZACIONPI=“SVI_CPI_COTIZACION_PI”;
var cotizaciones=JsonConvert.DeserializeObject(json);
foreach(协作中的var协作)
{
使用(SqlConnection conexion=newsqlconnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings[“ambiente”].ToString()))
{
conexion.Open();
使用(SqlCommand=newsqlcommand(SP_INSERTA_COTIZACIONPI,conexion))
{
comm.CommandType=System.Data.CommandType.StoredProcess;
comm.Parameters.AddWithValue(“IDCOTIZACION”,cotizacion.IDCOTIZACION);
comm.Parameters.AddWithValue(“IDPROYECTO”,cotizacion.IDPROYECTO);
comm.Parameters.AddWithValue(“NOMBRE_PROYECTO”,cotizacion.nombreProyecto);
comm.Parameters.AddWithValue(“IDPRODUCTO”,协同IDPRODUCTO);
comm.ExecuteNonQuery();//此处显示错误
}
}
}
返回json;
}

调用
/Ajax/GuardaCotizacionesPI
,然后显示一个名为
GuardarCotizacion
的方法。第一个如何连接到第二个?为什么要反序列化到
dynamic
?使用一个具体的类,所有这些都会消失。此外,每次使用
dynamic
,都会有一只小猫死亡。@peterB它们通过一个controller@DavidG当前位置正在讲最纯粹的真理。为什么要使用dynamic?您应该使用显式类型。尝试在Cotizaciones类中实现一个列表,并使用JsonConvert.DeserializeObject(json)。您可以调用
/Ajax/GuardaCotizacionesPI
,但随后显示了一个名为
GuardarCotizacion
的方法。第一个如何连接到第二个?为什么要反序列化到
dynamic
?使用一个具体的类,所有这些都会消失。此外,每次使用
dynamic
,都会有一只小猫死亡。@peterB它们通过一个controller@DavidG当前位置正在讲最纯粹的真理。为什么要使用dynamic?您应该使用显式类型。尝试在Cotizaciones类中实现一个列表,并使用JsonConvert.DeserializeObject(json)。