2011-05-02 3 views
0

ici est mon admin.aspx.vbconcernant une erreur de requête SQL

Imports System.Data.SqlClient 

Partial Class Admin 
    Inherits System.Web.UI.Page 
    Dim conn As New SqlConnection("Data Source=CHIRAG-PC;Initial Catalog=car;Integrated Security=True") 
    Dim cmd As SqlCommand 
    Dim drd As SqlDataReader 
    Dim adp As SqlDataAdapter 
    Dim y As String 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    End Sub 

    Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged 
     Dim x As Integer 


     x = GridView1.SelectedIndex 
     y = GridView1.Rows(x).Cells(1).Text 





    End Sub 

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim str As String 
     str = "update carHeader set cartype='" + car.Text.ToString() + "',imagefile='" + img.Text + "',capacity=" + cap.Text + "where id=" + Convert.ToDouble(y) 
     conn.Open() 
     cmd = New SqlCommand(str, conn) 
     cmd.ExecuteNonQuery() 
     conn.Close() 
    End Sub 
End Class 

et son admin.aspx

<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Admin.aspx.vb" Inherits="Admin" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server"> 
    <br /> 
    <br /> 
</asp:Content> 


<asp:Content ID="Content2" runat="server" contentplaceholderid="MainContent"> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="Data Source=CHIRAG-PC;Initial Catalog=car;Integrated Security=True" 
     ProviderName="System.Data.SqlClient" 
     SelectCommand="SELECT * FROM [carHeader] ORDER BY [id]"></asp:SqlDataSource> 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource1" Height="149px" Width="267px"> 
     <Columns> 
      <asp:CommandField ShowSelectButton="True" /> 
      <asp:BoundField DataField="id" HeaderText="id" 
       SortExpression="id" /> 
      <asp:BoundField DataField="cartype" HeaderText="cartype" 
       SortExpression="cartype" /> 
      <asp:BoundField DataField="imagefile" HeaderText="imagefile" 
       SortExpression="imagefile" /> 
      <asp:BoundField DataField="capacity" HeaderText="capacity" 
       SortExpression="capacity" /> 
     </Columns> 
    </asp:GridView> 
    <asp:Panel ID="Panel1" runat="server"> 
     <asp:Label ID="Label1" runat="server" Text="Image file"></asp:Label> 
     <asp:TextBox ID="img" runat="server"></asp:TextBox> 

     <asp:Label ID="Label2" runat="server" Text="Car Type"></asp:Label> 

     <asp:TextBox ID="car" runat="server"></asp:TextBox> 
     <asp:Label ID="Label3" runat="server" Text="capacity"></asp:Label> 
     <asp:TextBox ID="cap" runat="server"></asp:TextBox> 


     <asp:Button ID="Button1" runat="server" Text="Save" /> 


    </asp:Panel> 
</asp:Content> 

obtenir une erreur dans la requête SQL en ce qui concerne sa mise à jour déclaration

et le contenu de la table est de carHeader: cartype varchar, id int, imagefile varchar, capacité int

+0

Et l'erreur est ...? – David

+0

Quelle erreur obtenez-vous? – Ruben

+1

Vous ne savez pas - un espace avant "où"? – Erik

Répondre

1
... + cap.Text + "where ... 

Notez l'absence d'espace avant where. Il est probablement produire une instruction comme:

... field = valuewhere ... 

Ceci casserait le SQL.

De plus, il est de mauvaise pratique d'utiliser la concaténation de chaîne dans les instructions SQL comme celle-ci, à la fois du point de vue de la sécurité et des performances. Vous aurez envie de regarder en utilisant parameterized queries.

Edit: Basé sur votre commentaire ici:

sa conversion d'erreur me Givin de mise à jour = mis cartype .... pour type double est pas valide

Il semble que le erreur fait référence à cette partie de la requête:

set cartype='" + car.Text.ToString() + "' 

de quel type est cartype? Selon le message d'erreur, il s'agit d'un double. Mais en fonction de votre requête, vous essayez de définir une valeur de chaîne (en l'enveloppant dans des guillemets simples). Si c'est un double alors il doit être une valeur numérique, pas une chaîne.

+0

ce n'est pas un double typ c'est dans varchar ... – user734303

+0

@ user734303: Pouvez-vous déboguer dans le code et déterminer spécifiquement ce qui jette l'erreur? Par exemple, vous êtes également (dans le code, pas dans la base de données) en train de convertir directement la variable 'y' en double. Quelle est la valeur dans 'y' quand l'erreur est levée? – David

+1

Je dirais que votre première réponse (pré-édition) était la suivante - il est certain que la capacité et le mot-clé "where" sont ensemble, et comme nous devons deviner les colonnes dans la base de données, c'est la plus susceptible d'être numérique. –