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#?
14 svar · 421 visningar · startad av saw
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#?
Flyttas från SQL
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
Eller i c#
OleDbCommand salesCMD = new OleDbCommand("SalesByCategory", nwindConn);
salesCMD.CommandType = CommandType.StoredProcedure;
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?
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();
Men det är ju så jag gör nu, frågan var ju hur jag kör en SP i C#?
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
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??
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
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...
private DataSet ds1 = new DataSet();
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
Snart kanske.....
Error:
Fill: SelectCommand.Connection property has not been initialized
Även här så är jag frågande vad som menas...
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