2012-08-29 80 views
1

我使用Visual Web Developer在ASP.NET和SQL Server数据库中创建了一个Web应用程序。在SqlDataSource我做了连接INSERT INTOINSERT INTO错误消息

所以我的代码是:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
      SelectCommand="SELECT * FROM [Table1]" 
      InsertCommand="INSERT INTO [Table1] ([Name(nick)], [E-mail], [Text]) VALUES (@Name(nick), @E-mail, @Text)"> 
     <InsertParameters> 
      <asp:Parameter Name="Name(nick)" /> 
      <asp:Parameter Name="E-mail" /> 
      <asp:Parameter Name="Text" /> 
     </InsertParameters> 
</asp:SqlDataSource> 

一切看起来都很好,没有任何错误。当我在网络浏览器中查看我的项目,或者我开始调试时,我有正常的网页。然后我键入一些文本,点击发送按钮和应用程序中的错误。

Description: Incorrect syntax near '('. Must declare the scalar variable "@Name".

Specifications: System.Data.SqlClient.SqlException: Incorrect syntax near '('. Must declare the scalar variable "@Name".

在我的表中我有所有这些值,在我的网页中我也使用它。你能帮我解决什么问题吗?

非常感谢!

回答

2

与此查询

INSERT INTO Table1 (Name, E-mail, Text) VALUES (@Name, @E-mail, @Text) 

(缺口)创建问题更换您的查询

InsertCommand="INSERT INTO Table1 (Name, E-mail, Text) VALUES (@Name, @E-mail, @Text)"> 
+0

现在看起来很好,但我有错误:附近 'nvarchar的' 语法错误:-)在表我使用的名称 - 为nvarchar(50)邮件 - 为nvarchar(200)的消息 - 为nvarchar(MAX) 的相同的值,我也写了ViewForm ... – astrak

+0

+0

也从(delete)删除完成。新版本是:” SelectCommand =“SELECT * FROM [Table1]” InsertCommand =“INSERT INTO [Table1 ](Name,Mail,Message)VALVE(@Name,@ Mail,@Message)“> astrak

2

的语法似乎不正确。 您需要列出字段名称,然后参数名称
我想正确的字段是Name,并且您有一个名为@nick的参数,但据我所知也可能是相反的。

InsertCommand="INSERT INTO [Table1] ([Name], [E-mail], [Text]) VALUES (@nick, @E-mail, @Text)" 

作为一个侧面说明,尽量避免使用的数据类型(文本)的名称作为字段名

+0

嗯,我用Name取代了Name(nick)和Message而不是Text和InsertCommand =“INSERT INTO [Table1]([Name],[E-mail],[Message])VALUES(@Name,@ E-mail,@Message)”>现在我有错误消息' - '附近语法不正确。 必须声明标量变量“@E”。 – astrak

+2

@ user1634313:不要在你的参数名称中使用任何括号('('和')')或破折号('-')或类似的东西 - 使用**只是简单的字符** - 使用'@ name','' @昵称','@电子邮件'(没有破折号,没有括号,没有“有趣”的东西!) –

+0

由于@marc_s表示,参数名称是t-sql的标识符。你可以在你的Sql Books的在线或[此MSDN链接](http://msdn.microsoft.com/en-us/library/ms175874.aspx)上找到规则命名标识符, – Steve

0

含参数括号Name(nick)是不允许的,它是造成问题的原因。 只需在InsertParametersInsertCommand中将其替换即可。

InsertCommand="INSERT INTO [Table1] ([Name], [E-mail], [Text]) VALUES (@Name, @E-mail, @Text)"> 
    -- [Name] is considered as column in the table 
<asp:Parameter Name="Name" />