C# 使用C对表动态JSON使用Replace()方法#

C# 使用C对表动态JSON使用Replace()方法#,c#,asp.net,json,sql-server,C#,Asp.net,Json,Sql Server,我想使用方法Replace()将代码C中的双引号“更改为单引号” 例如在SQL Server中,我无法在nvarchar列中插入包含单个引号的文本 INSERT INTO table_ VALUES('can't use'); 所以我想我应该用 SET QUOTED_IDENTIFIER OFF; INSERT INTO table_ VALUES("can't use"); SET QUOTED_IDENTIFIER ON; 但是我的JSON表中的问题是包含单引号和双引号,我无法在数据库中

我想使用方法
Replace()
将代码C中的双引号
更改为单引号

例如在SQL Server中,我无法在
nvarchar列中插入包含单个引号的文本

INSERT INTO table_ VALUES('can't use');
所以我想我应该用

SET QUOTED_IDENTIFIER OFF;
INSERT INTO table_ VALUES("can't use");
SET QUOTED_IDENTIFIER ON;
但是我的JSON表中的问题是包含单引号和双引号,我无法在数据库中插入。这就是为什么我想使用方法
Replace()
。但它会引发错误

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'方法'Replace'没有重载接受'2'个参数'

我的代码

public SqlConnection con;
public SqlCommand cmd;
public SqlDataAdapter da;
public DataSet ds;
public DataTable dt;
public SqlDataReader rdr;
public SqlParameter pr;
protected void Page_Load(object sender, EventArgs e)
{
    con = new SqlConnection("data source = (local);initial catalog = DB; integrated security = true;");
    con.Open();
    cmd = new SqlCommand();
    cmd.Connection = con;

    WebClient api = new WebClient();
    string JSON = api.DownloadString("http://newsapi.org/v2/top-headlines?country=ma&apiKey=4fff1c0a541c43d99e4a6f319d191fca");
    dynamic myObj = JsonConvert.DeserializeObject<dynamic>(JSON);
    var qt = '"';

    for (int i = 0; i < myObj.articles.Count; i++)
    { 
        cmd.CommandText = "" +
            " SET QUOTED_IDENTIFIER OFF;" +
            " INSERT INTO NEWS VALUES(" +
            "" + qt + myObj.articles[i].source.id.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].name.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].author.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].title.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].description.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].url.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].urlToImage.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].publishedAt.Replace("'", qt) + qt + "," +
            "" + qt + myObj.articles[i].content.Replace("'", qt) + qt + ")" +
            " SET QUOTED_IDENTIFIER ON;";
        cmd.ExecuteNonQuery();
    }
}

查看您的表方案,我假设您获取的JSON具有
myObj.articles[I].source.id
的编号,该编号将被解析为
int
,而该编号又没有
Replace
方法:

var json = "{'id':1}";
var obj = JsonConvert.DeserializeObject<dynamic>(json);
obj.id.Replace("1", ""); // throws RuntimeBinderException: No overload for method 'Replace' takes 2 arguments
var json=“{'id':1}”;
var obj=JsonConvert.DeserializeObject(json);
obj.id.Replace(“1”,“”);//抛出RuntimeBinderException:方法“Replace”不重载2个参数
所以只要删除
Replace
调用它就可以了

对于参数化查询,有很多关于这个主题的信息,例如,您可以查看这个或


另外,我建议引入一些类来表示您的JSON方案并反序列化到它,而不是使用参数。这样您就不会有这个问题。双引号对您没有帮助。它们在SQL server中包含标识符,而不是字符串文本。如果您有一个带有single和doubl的字符串,您该怎么办e quotes?正如@pinkfloydx33已经指出的,您在这里走的是一条完全错误的道路。使用参数化查询。这将解决您当前的问题(以及其他一些问题)@stickybit我如何使用它们..请给我看一个例子使用你最喜欢的web搜索引擎搜索这个网站。有很多解释和例子。这能回答你的问题吗?
var json = "{'id':1}";
var obj = JsonConvert.DeserializeObject<dynamic>(json);
obj.id.Replace("1", ""); // throws RuntimeBinderException: No overload for method 'Replace' takes 2 arguments