从Xamarin.Android App将数据插入SQL Server随机关闭数据库连接

时间:2017-03-27 03:28:00

标签: c# sql sql-server xamarin xamarin.android

我正在为学校项目开发一个Xamarin.Android应用程序,在尝试将用户数据存储在数据库中时遇到了一个特殊的问题。我已经创建了与我的Microsoft SQL Server数据库的连接,它插入正常,直到我插入一个bytearray(我正在部署到我的个人设备)。

然后有时它会在Insert期间关闭连接,并且不会插入任何内容。有时它确实插入。对于为什么有时插入以及为什么它不与其他人相比,确实没有明显的模式。我在UI后端创建一个连接,并将“用户注册”数据与字节数组中的签名图像存储到SQL Server表中。

请注意,这一切都在一项活动中完成。一旦用户单击“注册”按钮,它就会运行此按钮,然后移动到另一个活动。我知道SQL插入有时可以插入,但很多时候我只是得到异常:

  

System.Data.SqlClient.SqlException(0x80131904):服务器关闭了连接。

我是否应该在活动中打开/关闭连接?只是出于想法。

这是我将BitMap转换为Image:

        var sig = new SignaturePadView(this);
        sig = FindViewById<SignaturePadView>(Resource.Id.signaturePadView1);
        sig.BackgroundColor=Color.Transparent;
        var signatureImage = sig.GetImage();

        byte[] bitmapData;
        using (var memStream = new MemoryStream())
        {
            signatureImage.Compress(Bitmap.CompressFormat.Jpeg, 0, memStream);
            bitmapData = memStream.ToArray();
        }

我可以在我的应用上解码并显示图像,以便正确检索图像并在插入中使用bitmapData。

以下是我的插入声明:

Database db = new Database();
SqlConnection dbcon = db.con;
dbcon.Open();

SqlCommand command = new SqlCommand("Insert Into dbo.Patrons (firstName, lastName, studentID, dateOfBirth, gender, email, isWaiverSigned, isBlayCertified, isLeadCertified, isSuspended, suspensionReason, dateSuspended, dateUnsuspended, dateOfCreation, lastCheckIn, signature) Values (@firstName, @lastName, @studentID, @dateOfBirth, @gender, @email, @isWaiverSigned, @isBlayCertified, @isLeadCertified, @isSuspended, @suspensionReason, @dateSuspended, @dateUnsuspended, @dateOfCreation, @lastCheckIn, @signatureImage)", db.con);

command.Parameters.AddWithValue("@firstName", newPatron.firstName);
command.Parameters.AddWithValue("@lastName", newPatron.lastName);
command.Parameters.AddWithValue("@studentID", newPatron.studentID);  
command.Parameters.AddWithValue("@dateOfBirth", newPatron.dateOfBirth);
command.Parameters.AddWithValue("@gender", newPatron.gender);
command.Parameters.AddWithValue("@email", newPatron.email);
command.Parameters.AddWithValue("@isWaiverSigned",newPatron.isWaiverSigned);
command.Parameters.AddWithValue("@isBlayCertified", newPatron.isBlayCertified);
command.Parameters.AddWithValue("@isLeadCertified", newPatron.isLeadCertified);
command.Parameters.AddWithValue("@isSuspended", newPatron.isSuspended);
command.Parameters.AddWithValue("@suspensionReason", newPatron.reasonSuspended);
command.Parameters.AddWithValue("@dateSuspended", newPatron.dateSuspended);
command.Parameters.AddWithValue("@dateUnsuspended", newPatron.dateUnSuspended);
command.Parameters.AddWithValue("@dateOfCreation", newPatron.dateCreated);
command.Parameters.AddWithValue("@lastCheckIn", newPatron.lastCheckIn);
command.Parameters.AddWithValue("@signatureImage", bitmapData);

command.Connection = dbcon;
command.CommandType = CommandType.Text;

try
{
    int recordsAffected = command.ExecuteNonQuery();
}
catch(Exception ex)
{
    Console.WriteLine($"{ex.ToString()}");
}

dbcon.close();

0 个答案:

没有答案