I förtvivlan försöker jag uppdatera min DataBas genom att lägga in en ny rad i mitt DataSet. Den nya raden finns i DataSetet, det har jag fått fram när jag felsökt. Men det verkar som det inte genereras någon Insert command automatiskt. Här är iaf koden Har du testat att köra insert frågan direkt i access/sql, vilken databas du nu använder, dvs inte från kod? Datrabasen är Access. Och ja, den varianten har jag testat. Då blir det också fel och felmedelandet säger inte så mycket annat, utan bara Syntax fel i insert intryck. Den markerar dock Text fältet som är av typen PM (eller heter det Variant?) om det nu kan vara någon orsak till att det inte fungerar. Kan det vara så att Text är ett reserverat ord? Testa att sätta hakparenteser runt ordet [Text] och kör frågan igen mot access. Hur man får Commandbuildern att fixa detta om det visar sig vara problemet har jag ingen aning om så det enda förslag jag har är att skriva SQL-satserna själv i så fall... Rekommenderar att du döper om kolumnen Text till något annat. Testa hakparentes runt fältnamnet och kontrollera att du försöker inserta ett giltigt värde. Felet låg i att Text var ett reserverat ord. Tack så mycket!Uppdatera DataBas med DataAdapter
<code>
OleDbConnection myConn = Edda.Settings.Instance().myConnection;
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
myDataAdapter.SelectCommand = new OleDbCommand("select * from sidor", myConn);
OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);
if (myConn.State != ConnectionState.Open)
myConn.Open();
DataSet myData = new DataSet();
myDataAdapter.Fill(myData, "NySida");
DataRow myNewRow = myData.Tables["NySida"].NewRow();
myNewRow["Namn"] = txtNamn.Text;
myNewRow["Grupp"] = txtGrupp.Text;
myNewRow["Include"] = txtInclude.Text;
myNewRow["OrderID"] = Int32.Parse(txtOrderID.Text);
myNewRow["Text"] = txtText.Text;
myNewRow["ProtectLevel"] = 0;
myData.Tables["NySida"].Rows.Add(myNewRow);
try
{
myDataAdapter.Update(myData, "NySida");
}
catch (Exception ex)
{
lblError.Text = "";
foreach (DataRow myRow in myData.Tables["NySida"].Rows)
{
lblError.Text += myRow["namn"];
}
lblError.Text += custCB.GetInsertCommand().CommandText;
lblError.Text += custCB.GetUpdateCommand().CommandText;
lblError.Text += ex.ToString();
}
myConn.Close();
</code>
Den data jag får av mitt catch sats är:
StratsidanSidorewdasf (Detta stämmer)
INSERT INTO sidor( Namn , Text , Include , ProtectLevel , Grupp , OrderID ) VALUES ( ? , ? , ? , ? , ? , ? )
UPDATE sidor SET Namn = ? , Text = ? , Include = ? , ProtectLevel = ? , Grupp = ? , OrderID = ? WHERE ( (ID = ?) AND ((? = 1 AND Namn IS NULL) OR (Namn = ?)) AND ((? = 1 AND Include IS NULL) OR (Include = ?)) AND ((? = 1 AND ProtectLevel IS NULL) OR (ProtectLevel = ?)) AND ((? = 1 AND Grupp IS NULL) OR (Grupp = ?)) AND ((? = 1 AND OrderID IS NULL) OR (OrderID = ?)) )
System.Data.OleDb.OleDbException: Syntaxfel i INSERT INTO-uttryck. at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) at ASP.admin_sidor_aspx.btnSkapa_OnClick(Object Source, EventArgs e) in E:\hemsidor\edda.net\admin_sidor.aspx:line 37 Sv: Uppdatera DataBas med DataAdapter
Med exakt de parametrar du försöker inserta.
Man får väldigt bra felmeddelanden på det viset.Sv: Uppdatera DataBas med DataAdapter
Sv: Uppdatera DataBas med DataAdapter
Sv: Uppdatera DataBas med DataAdapter
Sv: Uppdatera DataBas med DataAdapter
Dvs kolla att värdet kan uppfattas som en text med enkla apostofer runt värdet.Sv: Uppdatera DataBas med DataAdapter