Ich arbeite derzeit mit Dapper, um Daten von Sql-Server in Textfelder anzuzeigen. Ich habe diese beiden Tabellen:Verwenden von zwei SELECT-Anweisungen aus zwei verschiedenen Tabellen
id | fname | lname | Age
1 | cal | bla | 100
2 | vin | bla | 10
tabelle1
id | fname | lname | Age
1 | cal | vin | 50
2 | calvin | cal | 25
table2
Und meine gespeicherte Prozedur sieht wie folgt aus:
@Fname nvarchar(50)
AS
BEGIN
SELECT Fname,Lname,Age FROM table1 WHERE [email protected]
UNION
SELECT Fname,Lname,Age FROM table2 WHERE [email protected]
END
Ich bin der erste Name in Form Einfügen in der Textbox und es zeigt den Namen und das Alter an. Ich mag die resultierende Tabelle lname aus table1 und Alter von table2, so etwas umfassen:
id | fname | lname | Age
1 | calvin | bla | 50
Meine C# Funktion:
public void Multi(String name)
{
try
{
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString))
{
if (db.State != ConnectionState.Open)
db.Open();
DynamicParameters p = new DynamicParameters();
SqlCommand command = new SqlCommand("multi", con);
p.Add("@Fname", tb2.Text,
DbType.String,ParameterDirection.Input);
var multi = con.QueryMultiple("multi", p, commandType:
CommandType.StoredProcedure);
clients cls = new clients();
cls.C = multi.Read<Client>().ToList();
var cli = multi.Read<clients>().ToList();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
cls.C.Add(new Client()
{
Fname = (String)reader["Fname"],
Lname = (String)reader["Lname"],
Age = (int)reader["Age"]
});
tb2.Text = cls.C[0].Fname;
tb3.Text = cls.C[0].Lname;
tb4.Text = cls.C[0].Age.ToString();
und Client-Klasse:
class Client
{
public string Fname { get; set; }
public string Lname { get; set; }
public int Age { get; set; }
}
class clients
{
public List<Client> C = new List<Client>();
}
I‘ Erhalten dieser Fehler:
1-Procedure or function 'multi' expects parameter '@Fname', which was not
supplied.
2-The reader has been disposed; this can happen after all data has been
consumed Object name: 'Dapper.SqlMapper+GridReader'.
3- An explicit value for the identity column in table 'CloneInfo' can only
be specified when a column list is used and IDENTITY_INSERT is ON.
wies ich den Cursor auf Leser und es sagt, null und die Ausführung abbricht
ANTWORT: Ive hat dieses und es funktioniert perfekt:
DynamicParameters p = new DynamicParameters();
p.Add("@Fname", tb2.Text);
var multi = con.QueryMultiple("multi", p, commandType: CommandType.StoredProcedure);
clients cls = new clients();
clients cls2 = new clients();
cls.C = multi.Read<Client>().ToList();
cls2.C = multi.Read<Client>().ToList();
tb2.Text = cls.C[0].Fname;
tb3.Text = cls.C[0].Lname;
tb4.Text = cls2.C[0].Age.ToString();
if (db.State != ConnectionState.Closed)
db.Close();.C[0].Age.ToString();
Union alle? du schaust? –
mysql <> sqlserver – scsimon
@KannanKandasamy es auch nicht funktioniert. Ich versuche, zwei verschiedene Datensätze aus zwei verschiedenen Tabellen zu erhalten und sie im Formular mit mehreren Select-Anweisungen anzuzeigen – Calvin