格式化字符串看起来像mysql查询c#

时间:2017-03-25 11:20:31

标签: c# mysql sql

我想显示字符串:

string s = "CREATE TABLE shop (article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,dealer CHAR(20)DEFAULT ''NOT NULL,price   DOUBLE(16,2) DEFAULT '0.00' NOT NULL, PRIMARY KEY(article, dealer)); INSERT INTO shop VALUES..."

在文本框上,我想要这样(就像在工作台中一样):

CREATE TABLE shop (
 article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
 dealer  CHAR(20)DEFAULT '' NOT NULL,
 price   DOUBLE(16,2)DEFAULT '0.00' NOT NULL,
 PRIMARY KEY(article, dealer));
INSERT INTO shop VALUES...

有没有办法格式化字符串或任何其他解决方案?

2 个答案:

答案 0 :(得分:0)

有一个开源库可以帮助您实现这一目标。它被称为穷人的T-SQL格式化程序。我不确定它是否完全支持所有的MySQL语法,但它在非常复杂的查询中给了我很好的结果。

它打包在NuGet中,虽然它似乎使用旧的.NET 2.0。您可以在官方项目网站上找到更新的编辑: http://www.architectshack.com/PoorMansTSqlFormatter.ashx

答案 1 :(得分:0)

虽然为时尚晚,但为了那些希望尝试使用代码作为第三方库替代品的观众的兴趣,以下是代码段:

    string s = "CREATE TABLE shop (article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,dealer CHAR(20)DEFAULT ''NOT NULL,price   DOUBLE(16,2) DEFAULT '0.00' NOT NULL, PRIMARY KEY(article, dealer)); INSERT INTO shop VALUES (0001, 'dealer-0001', 100.10); INSERT INTO shop VALUES (0002, 'dealer-0002', 200.20);";

    Regex rx = new Regex("(CREATE\\s+TABLE\\s+\\w+\\s+\\()([^;]+);\\s*(INSERT\\s+INTO\\s+\\w+\\s+VALUES\\s+(\\([^;]+);\\s*)+");
    Match m = rx.Match(s);
    StringBuilder sb = new StringBuilder();
    sb.AppendLine(m.Groups[1].Value);     // get CREATE TABLE tblname (
    sb.AppendLine(m.Groups[2].Value.Replace("NULL,", "NULL,\r\n") + ";");   //    put every column definition in separate lines
    foreach (Capture p in m.Groups[3].Captures)
       sb.AppendLine(p.Value);   // get each INSERT statement in separate line
    textBox1.Text = sb.ToString();   // put everything in the Multiline TextBox

要使用上面的代码,创建一个空白的WinForm,添加Multiline TextBox和一个Button,将上面的代码放在按钮的Click事件中。