webForumDet fria alternativet

SP i C#

14 svar · 421 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Detta är kanske ett gränsfall, i vilket forum jag skall skriva men...

Hur drar jag igång en SP i C#?
I vanliga fall så gör jag ju så här:

da1 = new OleDbDataAdapter(SQLstring, con);
Men i C#?

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Flyttas från SQL

PMedlem sedan jan. 20012 204 inlägg
#3

kolla https://www.asp.net

    Sub Page_Load(Sender As Object, E As EventArgs) 

        Dim DS As DataSet
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlDataAdapter

        MyConnection = New SqlConnection("server=(local)\NetSDK;database=northwind;Trusted_Connection=yes")
        MyCommand = New SqlDataAdapter("Ten Most Expensive Products", MyConnection)

        MyCommand.SelectCommand.CommandType = CommandType.StoredProcedure

        DS = new DataSet()
        MyCommand.Fill(DS, "Products")

        MyDataGrid.DataSource=DS.Tables("Products").DefaultView
        MyDataGrid.DataBind()
    End Sub
DinoMedlem sedan sep. 20011 914 inlägg
#4

Eller i c#

OleDbCommand salesCMD = new OleDbCommand("SalesByCategory", nwindConn);
salesCMD.CommandType = CommandType.StoredProcedure;
sawMedlem sedan mars 20011 880 inlägg
#5

Nu blev jag lite mer förvirrad än vanligt.
I vanliga fall så tar jag ju hand om det på detta viset:

da1 = new OleDbDataAdapter(SQLstring, con);		
ds1 = new DataSet("frånAlbum");			
try
			
{				
con.Close(); 				
con.Open();				
da1.Fill(ds1,"frånAlbum");				
con.Close();
	
listBoxFyllTitlar.Items.Add
(ds1.Tables["frånTitel"].Rows[a]["Songtitel"].ToString());
nr[a] = ds1.Tables["frånTitel"].Rows[a]["Songtitel"].ToString();

Men hur fångar jag då upp vad jag får fram?

DinoMedlem sedan sep. 20011 914 inlägg
#6

Borde räcka med nedan kod när du använder DataAdapter.

da1 = new OleDbDataAdapter(SQLstring, con);	
dataset ds1;		
try			
{				
da1.fill(ds1, "dsName");
}
	
listBoxFyllTitlar.Items.Add
(ds1.Tables["frånTitel"].Rows[a]["Songtitel"].ToString());
nr[a] = ds1.Tables["frånTitel"].Rows[a]["Songtitel"].ToString();
sawMedlem sedan mars 20011 880 inlägg
#7

Men det är ju så jag gör nu, frågan var ju hur jag kör en SP i C#?

GladhMedlem sedan maj 20012 812 inlägg
#8
SqlConnection oConnection = new oConnection(DIN_CONNECTION_STRING);
SqlCommand oCommand = new SqlCommand(oConnection);

oCommand.CommandType = CommandType.StoreProcedure;
oCommand.CommandText = "NAMNET_PÅ_MIN_SP";

oConnection.Open();
SqlDataReader oDataReader = oCommand.ExecuteReader();
//-- gör lite kul grejer med DataReadern
oConnection.Close();

Skrivet ur huvudet så det går nog inte att klipp och klistera med tanke på stora och små bokstäver...

[redigerat]
Såg att du kör OleDBConnection, om du kör mot en SQL Server så använda dig av SqlConnection, om du kör mot Access/MySQL så kan du inte använda dig av SP då dessa inte är implementerade där. Om du använder en annan databas typ Oracle, så fortsätt att använda OleDbConnection och byt ut mina SQL mot OleDb i koden ovan.
[/redigerat]

- M

sawMedlem sedan mars 20011 880 inlägg
#9

Måste då komma med två frågor till, används DataReadern som DataSet?
I stället för
using System.Data;
using System.Data.OleDb;
vad skall jag då använda??

GladhMedlem sedan maj 20012 812 inlägg
#10

1. Både ja och nej! Datareader är snabbare än ett dataset, men håller en koppling till databasen öppen så länge du inte har stängt det eller stängt kopplingen. Det betyder att det inte är bra att skicka dataReaders mellan olika lager eller mellan olika metoder.

2. Beror på vilken databas du använder. Om du använder SQL Server 7/2000 så SKALL du använda System.Data.SqlClient och System.Data.SqlType. Detta eftersom du får en ordentligt prestanda ökning om du gör det. Du kan använda dig av OleDb mot dessa databaser också men är otroligt korkat.

Här kan du läse mer om DataAccess i .NET, några bra små exempel: http://samples.gotdotnet.com/quickstart/aspplus/doc/webdataaccess.aspx

- M

sawMedlem sedan mars 20011 880 inlägg
#11

Jo det borde ju vara enkelt, men jag lyckas ändå med att fela...

using System.Data;
using System.Data.SqlClient;
	
//
			
// TODO: Add any constructor code after InitializeComponent call
			
//
		
SqlConnection minCon = new SqlConnection("server=(local)
\\NetSDK;database=Melodi;Trusted_Connection=yes");
\\*******
private SqlConnection minCon;
private string[] nr;
private DataSet ds1;

private void LaddaListbox()
		
{			
string SQLstring ="SELECT Songtitel,hide FROM t_Songtitlar ORDER BY Songtitel";			
SqlDataAdapter myCommand = new SqlDataAdapter(SQLstring, minCon);			
//DataSet ds1 = new DataSet();			
try			
{				
myCommand.Fill(ds1, "frånTitel");			
minCon.Close();			
}			
catch(Exception fel)			
{				
MessageBox.Show(fel.Message,"Databasfel");		
}			
int rader = ds1.Tables["frånTitel"].Rows.Count;		
nr = new String[rader];			
for(int a = 0;a < rader; a++)			
{				
listBox1.Items.Add					
(ds1.Tables["frånTitel"].Rows[a]["Songtitel"].ToString());	
nr[a] = ds1.Tables["frånTitel"].Rows[a]["Songtitel"].ToString();
}		
}

Så här har jag fattat att det skulle vara för att ladda en enkel listbox med SQL servern.

ERROR:

Value can not be null, ParametarName dataSet

Jag förstår inte detta...

GrynetMedlem sedan maj 2001329 inlägg
#12

private DataSet ds1 = new DataSet();

GladhMedlem sedan maj 20012 812 inlägg
#13

I din kod använder du ju inga SP's du använder vanlig SQL sats som du skickar in.

Jag skulle dock inte har gjort så om jag bara skulle fyllt en list box, jag hade använt mig av en datareader och sedan bundit den mot listboxen.

			SqlConnection oConnection = new SqlConnection("SQL_STRING");
			SqlCommand oCommand = new SqlCommand();
			oCommand.CommandText = "SELECT *.....";
			oCommand.Connection = oConnection;

			oConnection.Open();
			SqlDataReader oDataReader = oCommand.ExecuteReader();

			ListBox1.DataTextField = oDataReader["FÄLTET_SOM_SKALL_VISAS_I_LISTBOXEN"].ToString();
			ListBox1.DataValueField = oDataReader["FÄLTET_SOM_SKALL_VAR_VALUE_I_LISTBOXEN"].ToString();
			ListBox1.DataSource = oDataReader;
			ListBox1.DataBind();

			oDataReader.Close();
			oConnection.Close();

Det är heller inte testat, men ger dig iallafall en hum om hur man kan göra...

- M

sawMedlem sedan mars 20011 880 inlägg
#14

Snart kanske.....
Error:
Fill: SelectCommand.Connection property has not been initialized

Även här så är jag frågande vad som menas...

GladhMedlem sedan maj 20012 812 inlägg
#15

okej.. nu är det slut lekt :)

Denna kod är testad och validerad så den fungerar :)

			SqlConnection oConnection = new SqlConnection("Data Source=.;Initial Catalog=_OnlineShop;Integrated Security=SSPI;");
			SqlCommand oCommand = new SqlCommand();
			
			oCommand.Connection = oConnection;
			oCommand.CommandType = CommandType.Text;
			oCommand.CommandText = "SELECT * FROM tblCustomer";
			
			oConnection.Open();
			SqlDataReader oReader = oCommand.ExecuteReader();
			
			ListBox1.DataValueField = "Id";
			ListBox1.DataTextField = "firstName";
			ListBox1.DataSource = oReader;
			ListBox1.DataBind();
			
			oReader.Close();
			oConnection.Close();

Så nu behöver du bara byta ut conenctionStringen, commandTexten, och de 2 fältens namn som är kopplade till Listbox1.

- M

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