webForumDet fria alternativet

Från OleDb till SqlClient i C#

10 svar · 306 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

På rekommendation ifrån er så har jag byggt om min app och använder mig nu av

using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;

private SqlDataAdapter da;
private SqlDataAdapter da1;
private DataSet ds;
private DataSet ds1;
private SqlConnection con;

string CONstring = "Data Source=; Initial Catalog=Melodi;Trusted_Connection=yes";
con = new SqlConnection(CONstring);

Detta fungera fantastiskt bra, men jag har ett bekymmer, hur
skriver jag om nedanstående kod så att det passar SqlClient?

OleDbCommand mDeleteCommand=new OleDbCommand(sqlDelete,con);				
OleDbCommand mInsertCommand=new OleDbCommand(sqlInsert,con);				
OleDbCommand mUpdateCommand=new OleDbCommand(sqlUppdate,con); 
				
con.Open(); 				
OleDbDataAdapter mAdapter=new OleDbDataAdapter(); //här läggs classen				
mAdapter.DeleteCommand = mDeleteCommand; 		
mAdapter.InsertCommand = mInsertCommand; 		
mAdapter.UpdateCommand = mUpdateCommand; 
				
mAdapter.Update(ds,"frånCD_Album");// denna skall vara med för att uppdateringen skall lyckas			
con.Close();

Tacksam för hjälp :stud

NickemannenMedlem sedan aug. 20003 575 inlägg
#2

OleDbCommand = SqlCommand
OleDbAdapter = SqlDataAdapter

sawMedlem sedan mars 20011 880 inlägg
#3

Så jag kan behålla min gammlakod, och bara byta ut mot vad du föreslog?

renholmMedlem sedan apr. 20012 266 inlägg
#4

Testa :)

I princip bör det fungera, kan vara vissa små funktioner som skilljer olika dataproviders åt.

sawMedlem sedan mars 20011 880 inlägg
#5

OK, jag skall bara testa och avakta resultaten då?

renholmMedlem sedan apr. 20012 266 inlägg
#6

Inte avakta :birp, du skall testa om det fungerar med att bara byta ut OleDbCommand mot SqlCommand. Vilket med största sannolikhet skall fungera.

sawMedlem sedan mars 20011 880 inlägg
#7

Tack, jag har stött på lite problem, men är inte säker på vad det är, jag återkommer om jag inte kan lösa det.

sawMedlem sedan mars 20011 880 inlägg
#8

JAg får bl a detta fel:

System.FormatException: Input string was not in a correct format.
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.Int32.Parse(String s, NumberStyles style, IFormatProvider provider)
   at System.Convert.ToInt32(String value, IFormatProvider provider)
   at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
   at System.Convert.ToInt32(Object value)
   at System.Data.Common.Int32Storage.Set(Int32 record, Object value)
   at System.Data.DataColumn.set_Item(Int32 record, Object value)

Couldn't store <Detta är våran första CD, som blev klar 2001-02-
30. Denna CD publicerades på MP3.COM den 2001-06-27> in 
CD_ID Column.  Expected type is Int32.

Den kod som jag kör fungerade 100% tidigare, nu skiter det sig...

GladhMedlem sedan maj 20012 812 inlägg
#9

Du måste ha gjort någon förändring innan, eftersom du försöker spara ner en textmassa till en kolumn som endast kan ta emot en INT. Speciellt med tanke på att kolumnen heter CD_ID vilket får en att tänka på att det borde vara ett ID-fält och inget fält där man skriver beskrivning/noteringar

Det har inget med OleDBSommnad / SQLCommand att göra. Mitt tips blir att stega igenom din kod i debugläge och se vart i koden som felet uppstår, sedan om du inte kan lösa problemet själv så skickar du med den koden där det blir fel, och eventuell kod som hör ihop med problemet.

- M

sawMedlem sedan mars 20011 880 inlägg
#10

Jag har nu kommit tillrätta med NÄSTAN alla problemen. Ett av de värsta/viktigaste var att jag blandade ihop ds1/da1 med ds/da.

Det som nu återstår är ett lustigt fel. I formuläret så finns textrutan textBoxCD_Marking.
I SQL Servern så heter fältet CD_Marking datatypen nvachar(30).
[jag är osöker på om jag har rätt datatyp].

Nu fungerar det så, att om textBoxCD_Marking är tom, då får jag inga problem, men om det står någonting så får jag ett error:

General network error.
Check your networkdocumentation

Om det INTE står någonting i textBoxCD_Marking så fungerar det...
Så här ser min SQL ut:

string sqlUppdate="Update t_Album " + 
" Set Album    = '" + textBoxTitel.Text      + "'," + 
     " Bild         = '" + textBoxBild.Text       + "'," + 
" CD_Marking   = '" + textBoxCD_Marking.Text + "'," + 
" PM           = '" + textBoxPM.Text         + "'" + 
" Where Album  = '" + listBoxAlbum.Text      + "'";

Någon som kan se något fel?

sawMedlem sedan mars 20011 880 inlägg
#11

Detta blir underliggare och underliggare.
Jag testade att enbart skriva in:
2003_03
Inga problem
Jag skrev in:
mmmmmmmmmmm
Heller inga problem(jag har satt längden till 11)
Men om jag skriver:
saw_2000_01
DÅ KOMMER PROBLEMEN. Så fort som jag skriver saw.
Nu har jag löst det provisoriskt, genom att lägga till en label, där det står "saw_", men efftersom CD_Marking är viktig så hadde jag velat ha in hela:'saw_2000_01' (jag har bl a cd registrerade i Statens Bild & Ljudarkiv, därför är märkning väldigt viktigt).
Vad kan detta bero på?

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)