Hej! Det låter snarare som om du har skrivit fel i din dataaccess-kod, alltså där du anropar SP:n. Se till att du angivit ParameterDirection.Output på den parameter som har OUT-deklarationen i SP:n. Ett exempel i C# (se parametern @ID på mInsertCommand):DataSet problem?
Jag använder mig av Data Sets för att spara data i databasen. Jag försöker skapa en personalkatalog som består av en eller flera anställda. Varje anställd kan ingå i 0 eller fler projekt.
Jag har tre tabeller:
Employee (info om den anställde)
Project (generella projekt)
EmployeeProject som har (EmployeeID och ProjectID som nyckel).
När jag försöker spara en person med projekt får jag följande fel:
<code>"Formal parameter '@EmlopyeeID' was defined as OUTPUT but the actual parameter not declared OUTPUT." </code>
Jag har testat att köra SPn separat och det har gått bra, men det är när jag kör hela koden som det blir fel. Jag misstänker att det är fel på dataset för EmployeeData.
Så här ser datasetet ut:
<code>
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="EmployeeData" targetNamespace="http://tempuri.org/EmployeeData.xsd" elementFormDefault="qualified"
attributeFormDefault="qualified" xmlns="http://tempuri.org/EmployeeData.xsd" xmlns:mstns="http://tempuri.org/EmployeeData.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="EmployeeData" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="EmployeeId" msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int" />
<xs:element name="FirstName" type="xs:string" />
<xs:element name="LastName" type="xs:string" />
<xs:element name="Title" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="TitleEnglish" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="DepartmentId" type="xs:int" minOccurs="0" nillable="true" />
<xs:element name="DepartmentName" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="DepartmentSection" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="Email" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="PhoneInternal" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="PhoneOther" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="Pager" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="EmploymentFomdate" type="xs:dateTime" minOccurs="0" nillable="true" />
<xs:element name="EmploymentTomdate" type="xs:dateTime" minOccurs="0" nillable="true" />
<xs:element name="EmploymentType" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="UserName" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="IsRemoved" type="xs:boolean" nillable="true" />
<xs:element name="Created" type="xs:dateTime" minOccurs="0" nillable="true" />
<xs:element name="CreatedBy" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="Modified" type="xs:dateTime" minOccurs="0" nillable="true" />
<xs:element name="ModifiedBy" type="xs:string" minOccurs="0" nillable="true" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="EmployeeProject">
<xs:complexType>
<xs:sequence>
<xs:element name="EmployeeId" type="xs:int" />
<xs:element name="ProjectId" type="xs:int" />
<xs:element name="Fomdate" type="xs:dateTime" minOccurs="0" nillable="true" />
<xs:element name="Tomdate" type="xs:dateTime" minOccurs="0" nillable="true" />
<xs:element name="Proportion" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="Assignment" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="IsTerminated" type="xs:boolean" nillable="true" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
</code>
Det är nånting med nycklarna EmployeeID och ProjectID men jag kan inte lista ut vad.
Hoppas nån kan hjälpa mig.
Mvh,
NazSv: DataSet problem?
<code>
public void Update(DataSets.DataProject projects, string UserID)
{
SqlConnection mConnection=new SqlConnection(ConnectionString);
mConnection.Open();
// Setup SELECT command
SqlCommand mSelectCommand=new SqlCommand("Project_GetProjectByID",mConnection);
mSelectCommand.CommandType=CommandType.StoredProcedure;
mSelectCommand.Parameters.Add("@ID",SqlDbType.Int,4,"ID");
// Setup INSERT command
SqlCommand mInsertCommand=new SqlCommand("Project_CreateProject",mConnection);
mInsertCommand.CommandType=CommandType.StoredProcedure;
mInsertCommand.Parameters.Add(new SqlParameter("@ID",SqlDbType.Int,4,ParameterDirection.Output,false,10,0,"ID",DataRowVersion.Current,null));
mInsertCommand.Parameters.Add("@Name",SqlDbType.VarChar,50,"Name");
// Setup UPDATE command
SqlCommand mUpdateCommand=new SqlCommand("Project_UpdateProject",mConnection);
mUpdateCommand.CommandType=CommandType.StoredProcedure;
mUpdateCommand.Parameters.Add("@ID",SqlDbType.Int,4,"ID");
mUpdateCommand.Parameters.Add("@Name",SqlDbType.VarChar,50,"Name");
// Create adapter and dataset
SqlDataAdapter mAdapter=new SqlDataAdapter();
mAdapter.UpdateCommand=mUpdateCommand;
mAdapter.SelectCommand=mSelectCommand;
mAdapter.InsertCommand=mInsertCommand;
mAdapter.Update(projects.Project);
mConnection.Close();
mConnection.Dispose();
mAdapter.Dispose();
}
</code>