无法修改函数GetSelectStatement从字符串json生成选择语句?

已加入
2018年9月26日
留言内容
22
编程经验
3-5
我在csharp上工作,我需要基于内部连接select语句生成select语句,但是我无法修改它
我需要获取字段,键和表以生成内部联接选择语句,如下所示:
从中选择FooterTable.ItemCode,FooterTable.Quantity,FooterTable.UniPrice

主表内部联接MasterTable.Serial = 页脚表.Serial,MasterTable.BranchCode = 页脚表.BranchCode,MasterTable.Year = 页脚表.Year上的FooterTable

其中MasterTable.Serial = 10 AND 主表.Year = 2019 AND 主表.BranchCode = 1
我试图通过csharp获得以下结果:

公共字符串GetSelectStatement(字符串JsonDataForSelect)
{
var root =(JObject)JsonConvert.DeserializeObject(JsonDataForSelect);
var查询="";
var items = root.SelectToken("Details").Children().OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
foreach(项目中的var个项目)
{
如果(item.Key =="table")
{
var 表Name = item.Value;
查询= 串.Format("从表{0}的内部联接表{1}中选择,其中", 表Name);
}
否则如果(item.Key =="keys")
{
var键= item.Value.SelectToken("").OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
var count = 0;
foreach(密钥中的var id)
{
数++;
如果(count == key.Count())
{
查询+ = 串.Format("{0} = {1}", id.Key, id.Value);
}
其他
{
查询+ = 串.Format("{0} = {1} and ", id.Key, id.Value);
}
}

}
}
返回查询;
}
json字符串我从中生成sql
{
"Details":{
"table":[
"MasterTable",
"FooterTable"
],
"fields":{
"ItemCode":"string",
"Quantity":"int",
"Price":"decimal"

},
"keys":{
"BranchCode":1,
"Year":2019,
"Serial":2
}
}
}
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
快过来没有懒惰的借口。请使用代码标签按钮。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
看起来您已经在获得帮助了 代码项目。我们为什么要在这里提供帮助,却浪费时间?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
人们拒绝帮助您的原因可能有很多。
  • 您将简要介绍您的解释,而不必提出要求 直接 问题即。 -为什么在第15行等处出现formatException错误
  • 您没有投入足够的精力来解释当前代码的问题,或者您对要执行的操作不够详细
  • 您没有解释为什么您的代码对您不起作用
  • 您不解释是否收到任何错误,如果存在,则不列出错误,也没有陈述您是否收到任何错误,
  • 您在多个论坛上发帖,并在这里为自己发言,像我这样的人每隔几个小时就会阅读其他论坛。在所有论坛上发布相同的问题会设置错误的语气。这也使您看起来像一个无贡献的人 帮助吸血鬼
  • 您不会将代码发布在代码标签中,尽管您可以设法在大多数其他论坛上正确地执行此操作。尽管我之前告诉过您使用代码标签,但您未能在此网站上纠正您的习惯。
结合以上所述,您只能怪自己。给您的主题一个适当的结构,并花时间用英语正确地写出来。尽管我们确实知道英语并不是每个人的母语,但是当您可以利用今天或许多在线语言翻译时,您没有任何措辞不佳的借口。现在,您已经阅读了所有内容,希望您下次记问题时还记得。


Now, a few questions about what you're doing. Lets use this piece of xml. Do you need the WORDS like; ie. "Year":2019, or do you only need the VALUES ie. 2019 beside your placeholder text?

您当前的代码做什么?
您当前的代码是否抛出任何错误?
如果收到错误,它们是什么?
您不想执行的代码在做什么?
如果您对当前代码有疑问,请先在代码标签中发布它,然后再引用可能存在问题的行号。

I would consider rewriting what you have above anyway. Using the JavaScriptSerializer - If you want the placeholder ie. , and the value, you can use a Dictionary by specifying <Dictionary<string, 串>> between Deserialize and your (json); object. Just as I've done below :
C#:
            var serializer = new JavaScriptSerializer(); /* Create a new JavaScriptSerializer */
            var receivedjson = serializer.Deserialize<Dictionary<string, 串>>(json); /* Return a dictionary */
您还可以返回一个值数组:
C#:
            串[] result = receivedjson.Select(func => func.Value.ToString()).ToArray(); /* Or Convert to an array and use only the values */
如果您考虑使用字典,这两种方法都为您提供了与代码值以及占位符进行交互的更流畅方法。然后,您也可以使用一点Linq来构建它们。


C#:
           public static readonly 串 json = @"{'Name': 'Avatar','ReleaseDate': '2009-8-7','Genres': 'Action'}"; /* This is my json file */
如果我在方法中运行此:
C#:
            var serializer = new JavaScriptSerializer(); /* Create a new JavaScriptSerializer */
            var receivedjson = serializer.Deserialize<Dictionary<string, 串>>(json); /* Return a dictionary */
            串[] result = receivedjson.Select(func => func.Value.ToString()).ToArray(); /* Or Convert to an array and use only the values */
            整型 i = 0;
            foreach (KeyValuePair<string, 串> kvp in receivedjson)
            {
                i++;
                Console.WriteLine($"Key {i} is : {kvp.Key} while value {i} is : {kvp.Value}");
            }
输出是:
C#:
Key 1 is : Name while value 1 is : Avatar
Key 2 is : ReleaseDate while value 2 is : 2009-8-7
Key 3 is : Genres while value 3 is : Action
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
请注意,Sheepings上面的所有要点都包含在 如何聪明地提问。当您询问交叉发布的粗鲁做法时,当我在另一个论坛中回复时,我给了您指向同一页面的链接。花10到15分钟阅读该页面上有关如何组合好问题的建议。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
根据我在第6条中发布的内容,您还应该接受Richard Deeming在codeproject上所讲的内容:

屏幕截图_21.jpg


这就是为什么我会放弃您的方法到最近的垃圾箱并学会正确地做事。

对不起,我认识到这一点,我会解决的
有了这样的半屁股轻松的回答,我现在可以看到跳伞运动员在谈论他的时候 叫你出任,而那些没有回馈社区论坛的人则无意中利用他们来寻求答案。您在所有论坛上都没有回答,这确实显示出您是哪种类型的用户,我是在查看您在其他论坛上的帖子后说的。

最后,我假设您尝试道歉而无视第6个帖子,并且您在代码项目以及您发布的其他五个其他委员会上收到的回复可能是由于您更专注于收到的废话答案 如此?提个醒;作为旁注。这是错的...

在您的下一个问题可能困扰您的数据库后,我不愿阅读您关于如何使用参数保护查询的下一个问题的恐怖故事 SQL注入。由于我确实读过您的其他主题,因此您正在直接将json形成为SQL。任何优秀的开发人员都知道会使用参数,而不使用串联的查询字符串,这会使您容易受到注入攻击。

通过不仔细检查他们对漏洞和针对您的正确方法的不足的答案,(尤其是从Stackoverflow之类的业余网站中)。您可以稍后处理后果。作为开发人员的小建议;质疑一切,不要一时兴起。

祝好运

这里有更多交叉路口: //www.tek-tips.com/viewthread.cfm?qid 和这里 如何修改函数GetSelectStatement生成sql select语句? 还有其他...
 
Last edited:
最佳 底部