แสดงให้เห็นว่าการตอบสนองอื่น ๆ แต่เป็นหลักคุณเพียงแค่ต้องสร้างSqlParameter
การตั้งค่าDirection
การOutput
และเพิ่มไปยังSqlCommand
's Parameters
คอลเลกชัน จากนั้นรันโพรซีเดอร์ที่เก็บไว้และรับค่าของพารามิเตอร์
ใช้ตัวอย่างโค้ดของคุณ:
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("sproc", conn))
{
SqlParameter outputIdParam = new SqlParameter("@ID", SqlDbType.Int)
{
Direction = ParameterDirection.Output
};
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(outputIdParam);
conn.Open();
cmd.ExecuteNonQuery();
int idFromString = int.Parse(outputIdParam.Value.ToString());
int idFromCast = (int)outputIdParam.Value;
int? idAsNullableInt = outputIdParam.Value as int?;
int idOrDefaultValue = outputIdParam.Value as int? ?? default(int);
conn.Close();
}
โปรดใช้ความระมัดระวังในการรับParameters[].Value
เนื่องจากประเภทจะต้องถูกโยนจากobject
สิ่งที่คุณประกาศว่าเป็น และSqlDbType
ใช้เมื่อคุณสร้างSqlParameter
ความต้องการให้ตรงกับประเภทในฐานข้อมูล หากคุณกำลังจะเอาท์พุทไปที่คอนโซลคุณอาจใช้Parameters["@Param"].Value.ToString()
( โดยชัดแจ้งหรือโดยปริยายผ่านการโทรConsole.Write()
หรือการString.Format()
โทร)
แก้ไข: กว่า 3.5 ปีและมีการดูเกือบ 20k ครั้งและไม่มีใครใส่ใจที่จะพูดถึงว่ามันไม่ได้รวบรวมด้วยเหตุผลที่ระบุไว้ในความคิดเห็น "ระวัง" ของฉันในโพสต์ต้นฉบับ ดี. แก้ไขตามความคิดเห็นที่ดีจาก @Walter Stabosz และ @Stephen Kennedy และเพื่อให้ตรงกับการแก้ไขรหัสอัปเดตในคำถามจาก @abatishchev
conn.Close()
อยู่ในusing
บล็อก