我想显示字符串:
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...
有没有办法格式化字符串或任何其他解决方案?
答案 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事件中。