2011-12-01 67 views
0

我想创建一个C#语句,它创建一个表。ASP.NET C#生成创建表语句

下面是我当前的查询:

string user = (User.Identity.Name); 

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

我想创建名称的表格,它会像Jane-Result2011111111

我能够创建表时,我的发言不包括名称:

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

可我知道我可以包括我statemen的- T'

谢谢

+0

您是否尝试过:'string db = user +“Result”+ DateTime.Now.ToString(“yyyyMMddHHmmss”);' - 没有百分号? –

+0

它可能是名称和结果之间的'-',它会对您造成问题。尝试没有它。 –

回答

1

编辑

好吧,你重新加标签,我的第一个答案后,编辑你的问题。尝试移动引号内的括号(或一起删除它们)。

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

有在C#更好的方法来串虽然结合起来。一个是String.Format

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

原来的答复

不知道该代码是(C#?)什么语言,但我猜你需要你的第二个双引号和单词用户之间的+

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

+0

谢谢你,你的解决方案工作 – gymcode

+0

太棒了,很高兴我能帮忙! –

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

的问题是在%符号,这对于运营商LIKE通配符,不应该在标识中使用。

#代替%,你应该没问题。

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

编辑
后您改变了您的问题更新的答案是:

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

不要用_使用[并更换-

哦,不要改变这个问题,使答案变得毫无用处。

+0

感谢您的帮助,但它仍然说' - '附近的语法不正确 – gymcode

0

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

0

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

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

参见Delimited Identifiers在SQL Server文档获取更多信息。

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

0

虽然我与其他评论员都认为创建每个用户的表可能不是一个伟大的设计,您可以更succintly写声明:

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

这有帮助吗?

0

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

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

这告诉大家,在非限定对象名称允许不包括-这就是为什么它是失败的特殊字符。您可以使用下划线代替(这是一个有效的字符),也可以通过将整个对象放在方括号中进行转义。其中任何一种都可以。

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