2012-06-06 2 views
0

Visual Studio 2010 및 ASP.NET Web Forms를 사용하여 프로젝트를 만들었습니다. 여기에는 MySQL 테이블에 바인딩 된 GridView 컨트롤이 있습니다. 그것은 문제없이 컨트롤에 내 테이블을 표시하지만 컨트롤에 편집 기능을 사용하면 필드에 필드가있을 때 테이블의 필드를 업데이트하는 데 문제가 있다는 것을 알게되었습니다.MySQL이있는 ASP.NET GridView 컨트롤 - 매개 변수에 공백이 포함 된 UpdateQuery

는 예를 들어, 나는 다음 표는 정의 :

CREATE TABLE `test_table` (
    `oid` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `first_column` varchar(20) NOT NULL, 
    `second_column` varchar(20) NOT NULL, 
    `third column` varchar(20) NOT NULL, 
    PRIMARY KEY (`oid`) 
) 

주 분야 중 하나가 이름에 공백이 있습니다. 이것은 내가 문제가있는 곳입니다. UpdateCommand로서

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="oid" DataSourceID="SqlDataSource1"> 
     <Columns> 
      <asp:CommandField ShowEditButton="True" /> 
      <asp:BoundField DataField="oid" HeaderText="oid" ReadOnly="True" 
       SortExpression="oid" /> 
      <asp:BoundField DataField="first_column" HeaderText="first_column" 
       SortExpression="first_column" /> 
      <asp:BoundField DataField="second_column" HeaderText="second_column" 
       SortExpression="second_column" /> 
      <asp:BoundField DataField="third column" HeaderText="third column" 
       SortExpression="third column" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:testcon %>" 
     ProviderName="<%$ ConnectionStrings:testcon.ProviderName %>" 
     SelectCommand="select * from test_table" UpdateCommand="update `test_table` set 
    `first_column` = @first_column, 
    `second_column` = @second_column 
where 
    `oid` = @oid"></asp:SqlDataSource> 

, 내가 잘이 테이블에 FIRST_COLUMN 및 second_column를 업데이트 할 수 있어요 : 내 페이지에서 나는 다음과 같은 코드가 있습니다. 이제는 같은 방법으로 third column을 업데이트하려고하지만 작동하지 않습니다. 나는이에 쿼리를 변경하는 경우 : 나는 또한 @third의 \ 열, @ {세 번째 열을} 시도했습니다

Parameter '@third' must be defined. 

을, @ : 쿼리를 실행할 때

update `test_table` set 
    `first_column` = @first_column, 
    `second_column` = @second_column, 
    `third column` = @third column 
where 
    `oid` = @oid 

그것은 나에게이 오류를 줄 것이다 [세 번째 열], {@ 세 번째 열} - 분명히 이러한 작업이 없습니다. 따라서 내 질문은 : 내 업데이트 쿼리에 공간이있는 MySQL 필드를 업데이트하려면 무엇을 넣어야합니까?

+0

'@ 세번째 열'에 공간이 있습니다. – codingbiz

+0

@ tunmise fasipe에 감사드립니다. 그게 내 질문의 핵심이야. 나는 합법적으로 공간을 포함하고있는 같은 이름의 필드를 참조하려고합니다. – endoalir

+0

다른 컬럼과 일치하도록 스키마를'third_column'으로 변경할 수 있습니다. 표준 변수에 공백이 없어야합니다. – codingbiz

답변

0

업데이트를 통해 모든 매개 변수 이름을 사용할 수 있어야는

http://www.asp.net/web-forms/tutorials/data-access/accessing-the-database-directly-from-an-aspnet-page/inserting-updating-and-deleting-data-with-the-sqldatasource-vb

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:testcon %>" 
    ProviderName="<%$ ConnectionStrings:testcon.ProviderName %>" 
    SelectCommand="select * from test_table" UpdateCommand="update `test_table` set 
`first_column` = @first_column, 
`second_column` = @second_column 
where `oid` = @oid"> 

    <UpdateParameters> 
    <asp:Parameter Name="first_column" Type="String" /> 
    <asp:Parameter Name="second_column" Type="String" /> 
    <asp:Parameter Name="third_column" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 
0

이 상황에 대한 해결책이 채워 Select 문에서 열 별칭 이름을 제공하는 매개 변수 Gridview. 예 :

SELECT ..., [third column] AS third_column, ... 
FROM ... 

그런 다음 @third_column을 매개 변수 이름으로 사용할 수 있습니다. 밑줄 대신 공백으로 열 머리글을 표시하려고 할 것으로 예상되므로이 필드의 HeaderText 속성을 원하는 것으로 설정할 수 있습니다.

이 방법을 사용하면 GridView의 업데이트 명령이 해당 매개 변수에 쉽게 매핑되므로 (이름이 같기 때문에) 데이터베이스의 정의를 변경할 필요가 없습니다. 또한 SQLServer Profiler를 사용하여 서버에서 실행되는 실제 T-SQL 코드를 확인하는 것이 좋습니다.

행운을 빈다.

관련 문제