SQL select 문을 사용하여 Access DB 배경에서 오는 것으로, SQL Server 데이터베이스에 데이터를 푸시하고 레코드를 업데이트하는 데 더 많은 작업이 필요합니다. SQL Server에서 레코드를 추가하는 방법을 처음으로 이해하려면 INSERT 명령이 포함 된 매우 긴 명령문이 필요했습니다. 이 말은 불필요하게 복잡해 보입니다. .NET을 사용하면 훨씬 간단해질 것입니다.SQL 서버 테이블에 간단한 행을 추가하거나 업데이트 할 수 없습니다.
내가 연구 등 그들 중 누구도 내 코드가에는 오류가 없다는 사실에도 불구하고 나를 위해 작동하지 DataTable
, DataSet
, SqlCommand
, SqlAdapters
, 여러 코드 샘플을 검토했습니다. 이 예제의 돌연변이가 너무 많아서 스택 오버플로에 도움이된다고 호소합니다.
다음은 내가하려는 일입니다.
- 연결합니다 SQL Server에 대한 외부 (작품!)
- 열기 단일 테이블이
Dongles
전화를 개최했다. - 일련 번호를 기준으로 행을 확인하십시오.
- 존재하는 경우 레코드를 업데이트하십시오.
- 그렇지 않으면 새 레코드를 추가하십시오.
나는 작업 한 코드 샘플의 최신 변이를 제공하고 있습니다. 코드를 실행하기 전에 수동으로 데이터베이스에 레코드 하나를 추가하여 SerialNumber 인수가 일치하는 것을 확인했습니다. 아쉽게도 if (dt.Rows.Count > 0)
문은 false를 반환하고 업데이트가 시도되지 않습니다.
이제 저는 이것을 말할 것입니다 .... 각 필드를 업데이트하는 라인을 성공적으로 통과 한 다른 돌연변이를 시도했습니다. 그러나 Update() 함수가 호출되면 (성공적으로) 실제 데이터베이스에는 아무 것도 전파되지 않습니다. 여기
코드입니다 :SqlCommand cmd = new SqlCommand("SELECT * FROM Dongles WHERE SerialNumber = " + m_dongle.SerialNumber, server.SQLConnection);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
dt.Rows[0]["IsLeased"] = m_dongle.IsLeased == true ? 1 : 0;
dt.Rows[0]["LeaseDaysRemaining"] = m_dongle.LeaseDaysRemaining;
dt.Rows[0]["DateAssigned"] = DateTime.Now;
dt.Rows[0]["ConfiguredBy"] = m_dongle.ConfiguredBy;
dt.Rows[0]["LicenseHolder"] = m_dongle.LicenseHolder;
dt.Rows[0]["ContactName"] = m_dongle.ContactName;
dt.Rows[0]["ContactPhone"] = m_dongle.ContactPhone;
dt.Rows[0]["ContactEmail"] = m_dongle.ContactEmail;
dt.Rows[0]["SerialNumber"] = m_dongle.SerialNumber;
dt.Rows[0]["IsNetworkDongle"] = m_dongle.IsNetworkDongle;
dt.Rows[0]["NetworkMaxUsers"] = m_dongle.NetworkMaxUsers;
dt.Rows[0]["NetworkAbsoluteMaxUsers"] = m_dongle.NetworkAbsoluteMaxUsers;
dt.Rows[0]["IsAssigned"] = m_dongle.IsAssigned;
dt.Rows[0]["DongleModel"] = m_dongle.DongleModel;
dt.Rows[0]["SalesforceID"] = m_dongle.SalesforceID;
da.Update(dt);
MessageBox.Show("Dongle profile updated successfully.", "Profile Saved",
MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
ado.net 및 DataTable을 당신이 마법을 사랑한다면 당신은, 예를 엔티티 프레임 워크를위한 도구 몇 가지 ORM의를 확인할 수 있습니다 당신을 위해 너무 복잡 경우 : –
안녕하세요, JD, ** 답변을 수락하려면 답안 **의 왼쪽에있는 체크 박스 개요를 클릭하십시오. 사람들은 그 점을 높이 평가하고 미래에 더 기꺼이 도울 것입니다. 여기 많은 다른 사람들과 마찬가지로, 나는 당신을위한 해결책을 가지고 있지만 당신이 돌려주지 않기 때문에 그것을주지 않을 것입니다 ... 죄송합니다. –
'where' 절없이 온전한 검사로 사용해보십시오. –