Avatar billede speedpete Nybegynder
04. juni 2007 - 15:51 Der er 15 kommentarer og
1 løsning

GridView Update og MySQL

Er der nogen der ved, om der er specielle problemer med at få Update til at virke i GridView når man bruger MySQL? Det lader til det når man googler? Her er, hvad jeg har; jeg kan fint læse ind i GridViewet, men når jeg retter teksten og trykker Update, så får jeg bare den gamle værdi læst ind i GridViewet?

<asp:GridView DataKeyNames="Bilagsnr" ID="GridView1" runat="server" DataSourceID="SqlDataSource1"
        AllowSorting="True">
        <Columns>
            <asp:CommandField ShowEditButton="True" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource
        ID="SqlDataSource1"
        runat="server"
        ConnectionString="<%$ ConnectionStrings:RegnskabConnectionString %>"
        ProviderName="<%$ ConnectionStrings:RegnskabConnectionString.ProviderName %>"
        SelectCommand="SELECT Beloeb , Bilagsnr, Tekst FROM bilag"
        UpdateCommand="UPDATE bilag SET Tekst=@Tekst where Bilagsnr=@Bilagsnr">
        <UpdateParameters>
            <asp:Parameter Name="Tekst" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>
Avatar billede dr_chaos Nybegynder
05. juni 2007 - 08:54 #1
prøv at fjerne:
<UpdateParameters>
            <asp:Parameter Name="Tekst" Type="String" />
        </UpdateParameters>
Databinder du dit gridview i codebehind ?
Avatar billede speedpete Nybegynder
05. juni 2007 - 09:38 #2
Jeg prøvede først uden UpdateParameters.
Jeg har ingen anden 'kode' end den viste mark-up.
Avatar billede speedpete Nybegynder
05. juni 2007 - 09:55 #3
Jeg tænkte, om det måske har noget at gøre med driveren/forbindelsen? Jeg har ikke min forbindelses-string her, men jeg har, som det fremgår, lavet en SqlDataSource. Mener at kunne huske at jeg har brugt en driver som hedder noget med 3.51, men det var ovre i java/JSP.
Avatar billede dr_chaos Nybegynder
05. juni 2007 - 10:05 #4
Databinder du dit gridview i codebehind ?
prøv at sætte datakeynames til Bilagsnr
Avatar billede speedpete Nybegynder
05. juni 2007 - 10:25 #5
"Jeg har ingen anden 'kode' end den viste mark-up" = jeg databinder ikke i codebehind.

"prøv at sætte datakeynames til Bilagsnr": I mit markup ser det således ud:<asp:GridView DataKeyNames="Bilagsnr" Er det det, du mener?
Avatar billede dr_chaos Nybegynder
05. juni 2007 - 10:40 #6
pokkers skal lige lære at læse hele koden.
Prøv at sætte et updating event på dit gridview og se om det bliver kaldt.
Avatar billede dr_chaos Nybegynder
05. juni 2007 - 10:42 #7
Og det samme på sqldatasourcen.
Der kan du undersøge parametre.
Hvis de ikke eksisterer kan du prøv med
<UpdateParameters>
            <asp:Parameter Name="Tekst" Type="String" />
        <asp:Parameter Name="Bilagsnr" Type="Int32" />
        </UpdateParameters>
Avatar billede speedpete Nybegynder
05. juni 2007 - 11:08 #8
lige nu er jeg hjemme, så jeg ligger og bakser med bare at connecte til min egen installation af MySQL
Avatar billede speedpete Nybegynder
05. juni 2007 - 12:46 #9
Så fik jeg noget op at køre herhjemme, men med samme problem.

Jeg har installeret ODBC 3.51 if. http://www.udvikleren.dk/DotNet/Article.aspx/214.
Så bruger jeg drag'n'drop til at lave følgende GrdivView og DataSource (her er hele aspxen for en ordens skyld):

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:SqlDataSource
            ID="SqlDataSource1"
            runat="server"
            ConnectionString="<%$ ConnectionStrings:regnskabConnection %>"
            ProviderName="<%$ ConnectionStrings:regnskabConnection.ProviderName %>"
            SelectCommand="SELECT * FROM bilag">
        </asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
        </asp:GridView>
    </div>
    </form>
</body>
</html>

I min web.config er følgende:

<add connectionString="Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=regnskab;User=mig;Password=1234;Option=3;" name="regnskabConnection" providerName="System.Data.Odbc"/>

Problemet synes at opstå i den automatiske "Configure DataSource". Her foreslår Visual Studio "SELECT * FROM [bilag]" som select-statement, og når man trykker Advanced og får "Advanced SQL Generation Options", så er det hele greyed-out.

Retter jeg så i koden til "SELECT * FROM bilag", så kan jeg fint få vist min tabel fra MySQL.
Avatar billede speedpete Nybegynder
05. juni 2007 - 13:07 #10
Dette virker fint (men ikke efter hensigten - det viser bare, at man godt kan SKRIVE til MySQL'en):

UpdateCommand="UPDATE bilag SET Tekst='hallo i stuen' where Bilagsnr='2'">

i modsætning til

UpdateCommand="UPDATE bilag SET Tekst=@Tekst where Bilagsnr=@Bilagsnr">
Avatar billede speedpete Nybegynder
05. juni 2007 - 13:26 #11
Nu nærmer det sig: Hvis man sætter et eller flere ?, så skulle man få fat i UpdateParamter'ne i rækkefølge. Nedenstående virker så langt, at jeg kan opdatere Tekst for Bilagsnr 2 med hvad jeg nu end taster ind på et givet bilagsnummer. Næste skridt er så at finde ud af, hvordan jeg får erstattet 2 med det rigtige Bilagsnr, ligesom for Tekst. Måske det har noget at gøre med typerne i .NET og MySQL?

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
            SelectCommand="SELECT Bilagsnr, Tekst FROM bilag"
            UpdateCommand="UPDATE bilag SET Tekst=? where Bilagsnr=2">
            <UpdateParameters>
                <asp:Parameter Name="Tekst" Type="String"/>
            </UpdateParameters>           
        </asp:SqlDataSource>
Avatar billede speedpete Nybegynder
05. juni 2007 - 20:05 #12
Så fik jeg det til at virke. Tilsyneladende gør Direction="Input" en forskel:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
            SelectCommand="SELECT Bilagsnr, Tekst FROM bilag"
            UpdateCommand="UPDATE bilag SET Tekst=? where Bilagsnr=?">
            <UpdateParameters>
                <asp:Parameter Name="Tekst" Direction="Input"/>
                <asp:Parameter Name="Bilagsnr" Direction="Input"/>
            </UpdateParameters>           
        </asp:SqlDataSource>
Avatar billede speedpete Nybegynder
05. juni 2007 - 20:06 #13
Rettelse: Direction="Input" er heller ikke nødvendig. Så det må være Type="Int32" der fejler.
Avatar billede dr_chaos Nybegynder
05. juni 2007 - 20:57 #14
Ok hvad type er bilagsnr i db ?
Avatar billede speedpete Nybegynder
06. juni 2007 - 08:12 #15
I MySQL har jeg lavet Bilagsnr som INTEGER og Tekst som VARCHAR. Det sjove er, at det går fint med Parameter Name="Tekst" Type="String", selvom den er VARCHAR i db?
Avatar billede dr_chaos Nybegynder
06. juni 2007 - 12:31 #16
String matcher som regel op mod en char type i db.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester