現在、Dapperを使用してSQL Serverのデータをテキストボックスに表示しています。2つの異なるテーブルから2つのSELECTステートメントを使用する
id | fname | lname | Age
1 | cal | bla | 100
2 | vin | bla | 10
TABLE1
table2の
id | fname | lname | Age
1 | cal | vin | 50
2 | calvin | cal | 25
そして、私のストアドプロシージャは、次のようになります:
@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
私は、フォームの最初の名前を挿入するよ私はこれらの2つのテーブルを持っていますテキストボックスにlnameとageが表示されます。
id | fname | lname | Age
1 | calvin | bla | 50
私のC#の機能::
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();
とクライアントクラス:
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>();
}
私は」私は、結果のテーブルは表2からTABLE1と年齢からLNAMEを含めるには、このような何かしたいですこれらのエラーが発生する:
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.
私は読者の上にカーソルを指摘し、それがnullで言うと実行が途切れ
ANSWER: アイブ氏はこれを追加し、それが完璧に動作します:
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();
をすべての連合?あなたは見ている? –
mysql <> sqlserver – scsimon
@KannanKandasamyそれもうまくいきませんでした。私は2つの異なるテーブルから2つの異なるレコードを取得し、複数の選択ステートメントを使用してそれらをフォームで表示しようとしています – Calvin