|
I have an MS Access table that I'm accessing from C# (via MSDE 2000). The primary key in the table is just an int column with identity set to "yes" and step set to '1'. So whenever I add a record Access automatically gives it a new primary key. Yay.
That works fine, but what I'd really like is to be able to retrieve the key that Access generates at the time that I insert the new record.
So right now my C# program just figures out the values for the non-primary keys and then sends an INSERT INTO command. Is there anyway to automatically retrieve the new ID that Access generates?
The only idea that I have so far is to create an additional column in the table called "isNew" or something. When the user submits the new record, the SQL statement could set the "isNew" column for that record to the user name. Then I could immediately send a SELECT to retrieve the ID WHERE isNew = 'user name'. Of course, then I'd also have to send yet another UPDATE to SET isNew = ''. So it's kind of a cumbersome solution, but at least it will work.
Anyone have anything better?
The ends can never justify the means. It is the means that determine the ends.
|
|
|
|
|
Get the most recently created id by running the query "select @@identidy" with the same database connection.
---
b { font-weight: normal; }
|
|
|
|
|
Thanks! I think that will work well. My only concern is that if two users simultaneously add records to the table, there could be trouble. But if I run the select query within a line or two of running the insert into query the chances of this happening are very low, right?
I would still like to have a full-proof method for future reference though. While I will only have a handful of users on this database at the same time, the program might conceivably need to be scaled up to over a 1,000 users.
Any idea what might work in that case?
The ends can never justify the means. It is the means that determine the ends.
|
|
|
|
|
Using identity column is not a good idea. There are many problems associated one being identity gap. I think you should implement your own increment procedure.
Have a table with the follwoing schema
CREATE TABLE dbo.Sequence
(
TableName varchar(30) NOT NULL,
NextVal int NOT NULL
)
LOCK DATAROWS
go
GetSequence should get you the id
CREATE PROCEDURE GetSequence (
@tbl varchar(30))
AS
DECLARE @nextval int
BEGIN
BEGIN TRAN
UPDATE Sequence
SET NextVal = NextVal + 1
WHERE TableName = @tbl
IF @@rowcount = 1
SELECT @nextval = NextVal
FROM Sequence
WHERE TableName = @tbl
COMMIT TRAN
SELECT @nextval
END
This will work even if there are 100 concurrent users
|
|
|
|
|
The @@identity method is absolutely safe. The value returned is the identity of the record last created within the same database session, e.g. with the same database connection.
If two users create a record each at exactly the same time, they still have separate database sessions, so the id returned to each user is the id of the record that that specific user created.
---
b { font-weight: normal; }
|
|
|
|
|
Hello,
I have a groupBox, and I want to add a HScrollBar, how can I implement the scrolling action if I have the controls within that groupBox, that are out of the groupBox's client area?
Thank you
|
|
|
|
|
|
Unfortunatelly GroupBox does not have AutoScroll property.
|
|
|
|
|
Can you put a panel in the GB, and add your controls to the panel instead?
|
|
|
|
|
That's exactly what I am going to do. Thank you.
|
|
|
|
|
Hello,
Is there a way of GradingOut DataGrid, so if it's Enabled = false, how can I show that it is disabled. Because my grid is in the pannel, so if I disable the pannel, grid gets disabled, however it looks like it's enabled.
I would want something like the textbox, if it's disabled it gets (ReadOnly) appearance.
Thank you
|
|
|
|
|
Do this in DataGridTextBoxColumn wire up GrayOutCellEvent
when the status of the Grid changes to Enabled = false.
protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight)
{
foreBrush = SystemBrushes.HighlightText;
.....
if (
this.GrayOutCellEvent != null &&
!this.DataGridTableStyle.DataGrid.IsSelected(rowNum)
)
{
GrayOutCellEventArgs grayOutCellEventArgs = new GrayOutCellEventArgs(rowNum);
this.GrayOutCellEvent(this, grayOutCellEventArgs);
if (grayOutCellEventArgs.IsGrayOut)
{
backBrush = SystemBrushes.ControlLight;
}
}
}
|
|
|
|
|
hi to all,
i need to populate a tree view with data but i have some restriction
in fact my relation parent ==> in the database look like this :
01 root
01MM module (child of root)
01MMFR form (child of module)
i can't found a trick to populate my treeview
does anyone has suggestions
thanks in advance and best regards
fady
|
|
|
|
|
Can you please post the schema of the table in the database holding the parent child relationship.
|
|
|
|
|
Lets assume you have all keys in a string array 'keys' and als names in a string array 'names':
HashTable keysToNodesHash = new HashTable();
for (int i = 0; i < keys.Length; i++) {
TreeNodeCollection nodes = treeView1.Nodes;
if (keys[i].Length > 2)
nodes = (TreeNodeCollection)hash[keys[i].SubString(0, keys[i].Length - 2)];
TreeNode newNode = nodes.Add(names[i]);
keysToNodesHash.Add(keys[i], newNodes.Nodes);
}
Haven't tested it but it should give you the basic idea. Note that this will only function properly if the nodes come in the right order (liek in your example). If this isn't true you will have to sort them before this operation.
|
|
|
|
|
Hi all, hope you can help me with a small problem.
I need to add an item to the forms drop down menu that you get when you right click the icon in the top left of the form.
Anyone know how??
Cheers
Kev
|
|
|
|
|
Hi,
I want to install multiple instance of the windows service with different name. So for that I need to read the service name at the time of installation from some config file.
Can any buddy help me out in this?
Ankit Singhal
|
|
|
|
|
Check this out
http://www.codeproject.com/csharp/CSharpWindowsServiceInst.asp
|
|
|
|
|
How can I show custom string such as "N/A" in DataGrid instead (null) for null columns?
My datagrid data will load by a DataSource.
Or how can I filter sum record/field when loading fata from DataSource to DataGrid !?
Thank you
|
|
|
|
|
I found it ...
int nColCount = dataGrid1.DataSource.Tables[0].Columns.Count;<br />
int nStyleCount = dataGrid1.TableStyles.Count;<br />
for(int nSC= 0; nSC < nStyleCount; nSC++ )<br />
for(int nCol = 0; nCol < nColCount; nCol++ )<br />
{<br />
dataGrid1.TableStyles[nSC].GridColumnStyles[nCol].NullText = "N/A";<br />
}<br />
|
|
|
|
|
hi,
What does .net stand for? or What is the .net original name?
Thanks
|
|
|
|
|
|
|
It means DOT in the NET
- ashish
|
|
|
|
|
Now, I just recently found out about PropertyGrid and I think I like it.
My problem is, I can't figure out how to display my tree in a apropriate way.
My classes look like this:
class MyTreeNode
{
List mylist = new List();
public MyTreeNode[] SubNodes
{
get { return (MyTreeNode[])mylist.ToArray(); }
}
public string Name = "something";
}
I want this MyTreeNode class to display as a list of nodes; but instead of that [0] as a name it should display the node's Name-attribute. I would also like to set the value to something different.
I just can't figure out how to do that exactly.
please give me a hint.
so long.
|
|
|
|