2013-01-06 23 views
3

J'ai cette erreur:Mot clé non pris en charge: 'provider'

Mot clé non pris en charge: 'fournisseur'.

Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails d'exception: System.ArgumentException: Mot clé non pris en charge: 'provider'.

Erreur Source:

Line 24:  { 
Line 25:   Session["id"] = e.CommandArgument.ToString(); 
Line 26:   SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
Line 27:   con.Open(); 
Line 28:    SqlCommand cmd1 = new SqlCommand("INSERT INTO tb2 (id, name) SELECT id, name FROM tb1 where id='"+Session["id"].ToString()+"'", con); 

Source File: c:\inetpub\wwwroot\logon\page.aspx Line: 26 

Voici mon code complet:

<%@ Page Language="C#" Debug="true" %> 
<%@ Import Namespace="System" %> 
<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace = "System.Data.SqlClient" %> 

<script runat="server" type="css"> 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     bind(); 
    } 
} 
protected void bind() 
{ 
    PendingRecordsGridview.DataSourceID = ""; 
    PendingRecordsGridview.DataSource = sd1; 
    PendingRecordsGridview.DataBind(); 
} 
protected void PendingRecordsGridview_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "accept") 
    { 
     Session["id"] = e.CommandArgument.ToString(); 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
      con.Open(); 
      SqlCommand cmd1 = new SqlCommand("INSERT INTO tb2 (id, name) SELECT id, name FROM tb1 where id='"+Session["id"].ToString()+"'", con); 
      SqlCommand cmd2 = new SqlCommand("delete from tb1 where id='"+Session["id"].ToString()+"'", con); 
      cmd1.ExecuteNonQuery(); 
      cmd2.ExecuteNonQuery(); 
      bind(); 
    } 
} 
</script> 
<form id="form1" runat="server"> 
<asp:GridView ID="PendingRecordsGridview" runat="server" AutoGenerateColumns="False" DataKeyNames="id" onrowcommand="PendingRecordsGridview_RowCommand" DataSourceID="sd1"> 
     <Columns> 
      <asp:templatefield HeaderText="Accept"> 
       <ItemTemplate> 
        <asp:Button CommandArgument='<%# Bind("id") %>' ID="Button1" runat="server" CausesValidation="false" CommandName="accept" Text="Accept" /> 
       </ItemTemplate> 
      </asp:templatefield> 
      <asp:templatefield HeaderText="name" SortExpression="name"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("name") %>'> 
        </asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("name") %>'> 
        </asp:Label> 
       </ItemTemplate> 
      </asp:templatefield> 
      <asp:templatefield HeaderText="id" SortExpression="id"> 
       <EditItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'> 
        </asp:Label> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text='<%# Bind("id") %>'> 
        </asp:Label> 
       </ItemTemplate> 
      </asp:templatefield> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="sd1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
     SelectCommand="SELECT * FROM [tb1]" DeleteCommand="DELETE FROM [tb1] WHERE [id] = ?" InsertCommand="INSERT INTO [tb1] ([name]) VALUES (?)" UpdateCommand="UPDATE [tb1] SET [name] = ? WHERE [id] = ?"> 
     <DeleteParameters> 
      <asp:parameter Name="id" Type="Int32" /> 
     </DeleteParameters> 
     <UpdateParameters> 
      <asp:parameter Name="name" Type="String" /> 
      <asp:parameter Name="id" Type="Int32" /> 
     </UpdateParameters> 
     <InsertParameters> 
      <asp:parameter Name="name" Type="String" /> 
     </InsertParameters> 
</asp:SqlDataSource> 
</form>  

Web.config

<configuration> 
    <connectionStrings> 

     <add name="ConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\inetpub\wwwroot\logon\_private\db1.mdb" 
      providerName="System.Data.OleDb" /> 
    </connectionStrings> 
</configuration> 

S'il vous plaît aider! Je vous remercie!

+0

Pourriez-vous montrer les parties du web.config qui a la chaîne de connexion? – scartag

+3

Avec la concaténation de chaînes comme ça, votre code est ouvert à [Injection SQL] (http://en.wikipedia.org/wiki/SQL_injection). – Oded

+0

@scartag c'est tout mon code. Je n'utilise pas web.config J'utilise expression web pas visual studio ou visual basic. –

Répondre

2

Il semble que vous essayez d'accéder à une base de données Access à l'aide d'un objet de connexion SQL Server. (La config de connexion fait référence au moteur de base de données Jet)

Vous devriez utiliser un OleDbConnection (et OleDbCommand, etc.) à la place.

Pour plus d'informations sur les chaînes de connexion voir: http://connectionstrings.com/access

Et, comme cela a été mentionné dans les commentaires, votre code est succeptable à SQL attaque d'injection. Vous voudrez peut-être lire how to protect yourself from SQL Injection Attacks (L'article est pour SQL Server, mais beaucoup de concepts sont également applicables à Access)

Questions connexes