繁体   English   中英

ASP.NET C#生成一个create table语句

[英]ASP.NET C# Generate a create table statement

我正在尝试创建一个创建表的ac#语句。

以下是我当前的查询:

    string user = (User.Identity.Name);

    string db = user+["-Result"] + DateTime.Now.ToString("yyyyMMddHHmmss");

我正在尝试创建一个名为Jane-Result2011111111

当我的声明没有包含名称时,我能够创建表:

user+"Result" + DateTime.Now.ToString("yyyyMMddHHmmss");

我想知道我怎么能包括-在我的发言?

谢谢

编辑

好的,您在我第一次回答后重新标记并编辑了您的问题。 尝试移动引号内的括号(或将它们全部一起移除)。

string db = user + "[-Result]" + DateTime.Now.ToString("yyyyMMddHHmmss");

C#中有更好的方法来组合字符串。 一个是String.Format

string db = String.Format("{0}-Result{1}", user, DateTime.Now.ToString("yyyyMMddHHmmss"));

原始答案

不确定代码是什么语言(C#?),但我猜你在第二个双引号和单词user之间需要一个+

string db = "'%" + user + "%'Result" + DateTime.Now.ToString("yyyyMMddHHmmss");

user + "-Result" + DateTime.Now.ToString("yyyyMMddHHmmss");

问题出现在%符号中,这是LIKE运算符的通配符,不应在标识符中使用。

#替换% ,你应该没事。

请参阅: http//msdn.microsoft.com/en-us/library/aa274626(v = sql.80).aspx

编辑
更改问题后,更新的答案是:

string db = user+"_Result" + DateTime.Now.ToString("yyyyMMddHHmmss"); 

不要使用[和更换-_

哦,不要改变问题,以便答案变得无用。

表名中不允许减号( - ),您可以使用下划线。 此处阅读常规标识符的规则

您可以使用双引号或方括号来分隔表名:

string db = "[" + user + "-Result" + "]"
    + DateTime.Now.ToString("yyyyMMddHHmmss");

有关详细信息,请参阅有关分隔标识符的SQL Server文档。

另请注意,如果用户名被篡改为包含恶意代码,则此代码可能容易受到SQL注入攻击。 请考虑使用SMO而不是执行原始CREATE TABLE SQL。

虽然我同意其他评论员的意见,即每个用户创建一个表可能不是一个很好的设计,但你可以更加简洁地写下你的陈述:

string db = String.Format(“[{0} -Result {1}]”,user,DateTime.Now.ToString(“yyyyMMddHHmmss”));

这有帮助吗?

数据库对象名称的最佳参考是:

http://msdn.microsoft.com/en-us/library/ms175874.aspx

这告诉您未分隔对象名称中允许的特殊字符不包括-这就是失败的原因。 您可以使用下划线(这是一个有效的字符)或通过将整个对象括在方括号中来逃避它。 这些都可以。

如果要动态创建大量表,可能存在设计问题。 您确定只是扩展模式以包含日期和用户列,然后将其全部包含在一个表中并使用where子句获取数据而不是动态生成表名,您是否会更好?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM