แสดงให้เห็นว่าการตอบสนองอื่น ๆ แต่เป็นหลักคุณเพียงแค่ต้องสร้าง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บล็อก